java - 为什么我在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] 但随后变为空。这是编译器。
解决方案
由于您在 while 内实例化数组列表,因此如果任何 if 或 for 条件不匹配,它将始终为空
您可以在 while 条件之前实例化数组列表,如下所示:
ArrayList<Long> numbers = new ArrayList<>();
while(current > 1)
推荐阅读
- python-3.x - 在 scipy 优化最小化中忽略了终止容差
- maven - mvn 版本:显示插件更新 - 结构化输出
- docusignapi - 签署文档后,可以使用docusignapi在netsuite中创建实体吗?
- excel - Excel:从序列日期到通用编号的 VLOOKUP
- javascript - 带有数组的过滤器对象无法使用 javascript
- d3.js - 使用 .data() 函数迭代每个第 n 个数据成员
- sql - 用值替换模式
- reactjs - TypeScript:“Window & typeof globalThis”上不存在属性“X”:使用“declare global”的建议解决方案给了我错误
- c - 如何编辑位于C中给定文件中特定位置的数字?
- jenkins-pipeline - 从 Spinnaker 触发 jenkins 管道时,是否可以传递 pipelineParams?