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);
}
ADDED
我想用这段代码做什么?我需要填充(填写)名为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.
}
除了计算e1
之外,我还需要计算e2
和e
。
答案 0 :(得分:4)
至少在两个方面,这是不优雅的代码:
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);
}
接下来,我们遇到的问题是,您没有告诉我们这些代码是做什么的,也不是“重复的局部变量问题”。哦,正如评论中指出的那样,你的循环永远不会终止。
答案 1 :(得分:3)
在不讨论代码的情况下,当您有重复的变量错误时,您始终可以使用{}。
这不编译
int a=0;
a++;
int a=0;
a++;
这样做:
{
int a=0;
a++;
}
{
int a=0;
a++;
}
答案 2 :(得分:2)
@ Jon的简化是最安全的,但我怀疑它可以进一步简化。
exchanges.add(getValue());
while (true) { // forever??
// do you need null values or can you use int[]
int[] newExchange = getValue(exchanges.get(exchanges.size()-1);
// do you need to add a copy, if not then clone() can be dropped.
exchanges.add(newExchange.clone());
}