0
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.
}

我需要计算e1e2另外还要计算e.

4

3 回答 3

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);
}

接下来我们遇到的问题是,您没有告诉我们这段代码的目的是什么,也没有告诉我们“重复的局部变量问题”是什么意思。哦,正如评论中指出的那样,您的循环永远不会终止。

于 2010-12-03T11:07:47.537 回答
3

在不讨论您的代码的情况下,当您出现重复变量错误时,您始终可以使用 {}。

这不编译

            int a=0;
            a++;


            int a=0;
            a++;

这样做:

        {
            int a=0;
            a++;
        }
        {
            int a=0;
            a++;
        }
于 2010-12-03T11:12:49.750 回答
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());
}
于 2010-12-03T11:19:53.883 回答