【发布时间】:2015-06-28 15:51:57
【问题描述】:
不久前我开始从事 Project Euler 的工作,并且我已经完成了问题 #3 的代码。任务是找到一个大数(600851475143)的最大素数。我已经用Java完成了代码,但是我有一个调试问题。
Here's链接。
当我尝试运行它时,它返回此错误:
线程“主”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));
}
}
}
我不想要问题的解决方案,只是修复错误的方法。
【问题讨论】:
-
从阅读消息开始。浏览异常的 javadoc 以了解它的含义以及抛出的时间。在您的代码中找到第 24 行。问问自己为什么会在该行引发此异常。如果找不到原因,请使用调试器。
-
请尊重 Project Euler 不分享解决方案的意愿。 (
[...] you are requested to be thoughtful in not posting anything that might explicitly give away how to solve a particular problem.projecteuler.net/about.