首页 > 解决方案 > 为什么我在java中的arraylist会自己变空

问题描述

我有一个简单的代码。我将一个数字除以它的最小因子,直到得到 1。但由于某种原因,我存储因子的数组列表变空了。

long total = 0;
long current = 6;
total += current;
while(current > 1){
     ArrayList<Long> numbers = new ArrayList<>();
     for(long j = 2; j<= Math.ceil(Math.sqrt(current)); j++){                
         if(current % j == 0){
           numbers.add(j);
         }
     }
     System.out.println(numbers);
     total += current / numbers.get(0);
     current = current / numbers.get(0);
 }

我的答案应该是 6 + 3 因为 6/2(最小因子)+ 1 因为 3/3(最小因子)。

我的错误总计 += current/numbers.get(0);

当我打印 arraylist 时,它显示 [2,3] 但随后变为空。这是编译器。

在此处输入图像描述

标签: java

解决方案


由于您在 while 内实例化数组列表,因此如果任何 if 或 for 条件不匹配,它将始终为空

您可以在 while 条件之前实例化数组列表,如下所示:

ArrayList<Long> numbers = new ArrayList<>(); 
while(current > 1)

推荐阅读