我最近开始研究Euler项目,我已经完成了问题#3的代码,任务是找到大量的最大素数(600851475143)。我已经用Java完成了代码,但是我有一个调试问题。
下面是链接。
当我尝试运行它时,它返回以下错误:
线程“主”java.lang.IndexOutOfBoundsException中的异常:索引: 1,大小:1 在java.util.ArrayList.rangeCheck(ArrayList.java:653) 在java.util.ArrayList.get(ArrayList.java:429) 在main.main(main.java:24)
这是我的密码:
import java.util.ArrayList;
import java.util.List;
public class main {
public static void main(String[] args) {
long n = 600851475143L;
int factor = 1;
List<Integer> factors = new ArrayList<Integer>();
List<Integer> pfactors = new ArrayList<Integer>();
int position = 0;
int testn = 1;
while (factor <= n) {
if (n % factor == 0) {
factors.add(factor);
factor++;
}
else {
factor++;
}
while (position <= factors.size()) {
while (factors.get(position) >= testn) {
if (factors.get(position) % testn == 0 && testn != 1 && testn != factors.get(position)) {
position++;
}
else {
pfactors.add(factors.get(position));
position++;
}
}
}
int length = pfactors.size();
System.out.println(pfactors.get(length));
}
}
}我不想要这个问题的解决方案,只是一种解决问题的方法。
发布于 2015-06-28 15:54:47
列表元素在0大小的范围内,所以您的while条件应该是position < factors.size()而不是position <= factors.size()。否则,只要factors.get(position)等于factors.size(),position就会抛出一个factors.size()。
https://stackoverflow.com/questions/31101728
复制相似问题