这会计算一串数字。
maximumList和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!");
}
答案 0 :(得分:1)
我看起来每次进入calculateAnswer()时都会创建一个新的ArrayList实例,并将其分配给只在该方法范围内的tempList变量。好像你需要访问一个在多个calculateAnswer()调用中持久化的tempList。