为什么我会收到“重复的局部变量”错误?

时间:2010-12-03 09:20:20

标签: java duplicates local-variables

我有一个循环,我在其中计算一个值并将其添加到列表中。所以,我做了类似的事情:

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?

1 个答案:

答案 0 :(得分: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。因为你不会在循环中使用它。