2010-12-03 107 views
0

我有一个循环,我计算一个值并将其添加到列表中。所以,我做这样的事情:为什么我会收到“重复的本地变量”错误?

x = getValue() 
values.add(x) 
while (true) { 
    x = getValue(); 
    values.add(x) 
} 

我发现这个方法是行不通的,因为我添加相同的实例列表。更详细地说,在循环的每个循环中,我重新给x分配一个新的值,并且这样做是为了更改已经添加到列表中的所有元素的值(因此最终我得到了相同元素的列表)。

为了解决这个问题,我做了以下内容:

x = getValue(); 
Integer[] valueToAdd = new Integer[n]; 
for (int i=0; i<n; i++) { 
    valueToAdd[i] = x[i]; 
} 
while (true) { 
    x = getValue(); 
    y = new Integer[n]; 
    for (int i=0; i<n; i++) { 
     valueToAdd[i] = x[i]; 
    } 
    values.add(valueToAdd) 
} 

这样,我想创建一个新的实例每次想要的值添加到列表中。但它不起作用,因为我得到一个重复的局部变量错误。

我也很奇怪,如果我在循环中多次声明相同的变量,我没有这个错误。只有我首先在循环之外声明一个新变量,然后在循环中声明问题才会出现。

在Java中有没有一种方法可以为不同的实例重用相同的名称?

ADDED 我需要澄清一些问题。我没有显示所有的代码。我在循环中有break命令(当一个新值不能生成时,我退出循环)。 xvalueInteger[]类型。

加入2- 既然有人提到这个问题可以在getValue()我需要在这里更多的细节。其实我的代码中没有getValue()(我在这里用getValue()来缩短我的例子)。在我的代码有:

Integer[] x = new x[n]; 
    while (true) { 
     for (int i=0; i<n; i++) { 
      x[i] = y[i]; 
     } 
     values.add(x) 
    } 

而且因为在我values名单我有相同的元素没有工作(我知道,在每个周期x循环有一个新的值)。

附加的3

Why all elements of my list seems to be the same?

+0

'x'的类型是什么?这些循环是如何运行的?你描述为“重复的局部变量错误”的错误的*实际文本*是什么? – EJP 2010-12-03 09:27:03

+0

@EJP,我在循环中有break命令(当一个新值不能生成时,我退出循环)。 x和值具有Integer []类型。 – Roman 2010-12-03 09:35:17

回答

2

你的问题是不是你认为它是。例如看看这个简单的程序:

String x = null; 
List<String> l = new ArrayList<String>(); 
for (int i = 0; i < 10; i ++) { 
    x = String.valueOf(i); 
    l.add(x); 
} 

System.out.println(l); 

它输出的数字从0到9这是因为Java是通过按值(check here)。您没有将参考传递给x,您正在传递x的值(在add方法中)。

所以问题在于getValue()方法,它返回相同的对象。

更新:现在,这个问题更有意义。您每次都在使用同一个对象x,并且只是更改其状态。为了把不同的值只是移动的声明内循环:

while (true) { 
    Integer[] x = new x[n]; 
    ... 
} 

如果你需要它的循环外,好了,只需使用另一个变量存在。它不必被命名为x。因为无论如何你都不会在循环中使用它。

相关问题