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

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

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中是否有一种方法可以为不同的实例重用相同的名称?

添加我需要澄清一些问题。 我没有显示所有代码。 我在循环中有break命令(当无法生成新值时,我退出循环)。 xvalue具有Integer[]类型。

添加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

为什么列表中的所有元素看起来都一样?

你的问题不是你想象的那样。 例如,看看这个简单的程序:

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

它打印从0到9的数字。这是因为java是按值传递( 请在此处查看 )。 您没有将引用传递给x,而是传递x的值(在add方法中)。

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

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

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

如果你需要在循环之外,那么,只需在那里使用另一个变量。 它不必命名为x 。 因为你无论如何都不会在循环中使用它。