【发布时间】:2014-08-27 03:39:11
【问题描述】:
这会计算一串数字。
biggestList 和 upperBound 在顶部初始化。
即使我将 i 设置为某个非 1 数字,它也只会打印 1-> 那是 1 个数字!
代码在很长的计数上运行良好,但是一旦我用持有链的 ArrayLists 替换它们,它就坏了。我在 ArrayList 代码中做错了吗?
private void calculateIterations(){
for (long i = 1; i <= upperBound; i++){
calculateAnswer(i);
}
}
private void calculateAnswer(long i) {
long number = i;
ArrayList <Long> tempList = new ArrayList<>();
if (number == 1 ){
tempList.add(number);
if (tempList.size() > biggestList.size()){
biggestList.clear();
biggestList.addAll(tempList);
printLargest();
}
}
else if (number % 2 == 0){
tempList.add(number);
number /= 2;
calculateAnswer(number);
}
else {
tempList.add(number);
number = number * 3 + 1;
calculateAnswer(number);
}
}
private void printLargest(){
biggestList.stream().forEach((n) -> {
System.out.print(n + " → ");
});
System.out.println("");
System.out.println("That's " + biggestList.size() + " numbers long!");
}
【问题讨论】:
-
它没有显示编译器错误。我是递归和复制 ArrayLists 的新手,所以我什至不知道在哪里看。 AFAIK calculateIterations 只运行一次,但即使 i = 不管, print 也会打印 1。好困惑。
-
提示,你的方法不应该是无效的,并且要使用递归,它似乎需要一个
List。