【发布时间】:2014-09-13 23:32:22
【问题描述】:
所以我正在尝试解决这个问题:
前 50 个自然数写在黑板上。您应用以下操作 49 次,直到得到一个最终数字:
从棋盘中选择任意两个数字,a 和 b。
删除这两个数字,并将它们替换为 |a-b|。
确定板上最终值剩余数的所有可能值的总和。
我写了以下代码:
package brillianorg;
import java.util.ArrayList;
public final class AComplexFunction {
ArrayList<Integer> integerArray;
AComplexFunction()
{
this.integerArray = new ArrayList<>();
for(int i = 1;i<=4;i++)
{
integerArray.add(i);
}
System.out.println(returnPathSum(integerArray));
}
int returnPathSum(ArrayList<Integer> newArray)
{
int pathSum = 0;
System.out.println(newArray);
if(newArray.size() == 1)
{
pathSum+=newArray.get(0);
}
else
{
for(int index1 = 0;index1<newArray.size();index1++)
{
System.out.println("iterating through first loop");
for(int index2 = index1+1;index2<newArray.size();index2++)
{
System.out.println("index 1:"+index1+"index 2:"+index2+"array size:"+newArray.size());
ArrayList<Integer>tempArray = newArray;
int difference = Math.abs(newArray.get(index1)-newArray.get(index2));
tempArray.set(index2, difference);
tempArray.remove(index1);
pathSum+=returnPathSum(tempArray);
}
}
}
return pathSum;
}
}
我有点困惑,为什么虽然它确实运行了,但 for 循环似乎没有迭代。我有点不明白为什么。
你能告诉我为什么它不迭代吗? (但是请不要为我解决问题,除非修复迭代问题解决了问题)
【问题讨论】:
-
我不确定您要完成什么,但在使用 for 循环遍历集合时从集合中删除元素是个坏主意。您可能需要使用迭代器并重试。
-
@AafreenSheikh 相反,如果他在修改列表时使用迭代器,他会得到ConcurrentModificationException