这会计算一串数字。
biggestList 和 upperBound 在顶部初始化。
即使我将 i 设置为某个非 1 数字,它也只会打印 1-> 长度为 1 个数字!
代码在处理长计数时工作正常,但是当我用保存链的 ArrayList 替换它们时,它就崩溃了。我在 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!");
}
最佳答案
我看起来每次输入calculateAnswer()时都会创建一个ArrayList的新实例并将其分配给仅在该方法范围内的tempList变量。似乎您需要访问在多个calculateAnswer() 调用中持续存在的tempList。
关于Java:对 ArrayList 使用递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25513751/