【问题标题】:Java: Using recursion with ArrayListsJava:对 ArrayList 使用递归
【发布时间】: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

标签: java recursion arraylist


【解决方案1】:

我看起来每次输入 calculateAnswer() 时都会创建 ArrayList 的新实例并将其分配给仅在该方法范围内的 tempList 变量。似乎您需要访问在多个 calculateAnswer() 调用中持久的 tempList。

【讨论】:

  • 这正是问题所在。我把它放在上面,它就像一个魅力。不知道为什么以前本地声明的计数有效,想想吧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多