Integer[] lastExchange = new Integer[nColors];
Integer[] exchangeToAdd = new Integer[nColors];
lastExchange = getValue();
exchangeToAdd = getValue();
exchanges.add(exchangeToAdd);
Integer[] newExchange = new Integer[nColors];
while (true) {
newExchange = getValue(lastExchange);
Integer[] exchangeToAddForLoop = new Integer[nColors];
for (int i=0; i<nColors; i++) {
lastExchange[i] = newExchange[i];
exchangeToAddForLoop[i] = newExchange[i];
}
exchanges.add(exchangeToAddForLoop);
}
已添加
我想用这段代码做什么?我需要填充(填写)名为 exchanges
的列表。列表的第一个元素是lastExchange
。我的代码问题是我总是需要创建一个变量的两个副本(这就是为什么我认为代码不优雅但我找不到更好的解决方案)。例如,一开始我创建 lastExchange
,然后创建 exchangeToAdd
(与 lastExchange
具有相同的值)。循环中也会发生同样的情况。我创建 lastExchange
,然后创建 exchangeToAddForLoop
。我这样做是因为我无法将 lastExchange
添加到列表中,因为它稍后会被修改。
添加2
这是我的问题。我有这样的代码:
Integer[] e = getValue();
Integer[] e1 = getValue(); // <-- I do not like that.
exchanges.add(e1); // <-- I do not like that.
while (true) {
Integer[] e_new = getValue(e);
Integer[] e2 = new Integer[nColors]; // <-- I do not like that.
for (int i=0; i<nColors; i++) {
e[i] = e_new[i];
e2[i] = e_new[i]; // <-- I do not like that.
}
exchanges.add(e2); // <-- I do not like that.
}
除了计算e
之外,我还需要计算e1
和e2
。
最佳答案
这至少在两个方面是不优雅的代码:
- 大多数局部变量都会被赋值,然后立即被覆盖
- 您的
newExchange
变量可以声明为更深层次的嵌套。
因此,在不改变任何行为的情况下,这是一个更好的版本:
Integer[] lastExchange = getValue();
Integer[] exchangeToAdd = getValue();
exchanges.add(exchangeToAdd);
while (true) {
Integer[] newExchange = getValue(lastExchange);
Integer[] exchangeToAddForLoop = new Integer[nColors];
for (int i=0; i<nColors; i++) {
lastExchange[i] = newExchange[i];
exchangeToAddForLoop[i] = newExchange[i];
}
exchanges.add(exchangeToAddForLoop);
}
接下来我们遇到的问题是,您没有告诉我们这些代码的用途,也没有告诉我们“重复的局部变量问题”的含义。哦,正如评论中指出的,你的循环永远不会终止。
关于java - 这是重复局部变量问题的优雅解决方案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4344883/