项目Euler解决方案#3(Java):调试
不久前,我开始了Euler项目的工作,我已经完成了问题3的代码。任务是找到大数(600851475143)中的最大素因子。我已经用Java完成了代码,但是我有一个调试问题 链接 当我尝试运行它时,它返回以下错误: 线程“main”java.lang.IndexOutOfBoundsException中的异常:索引:1,大小:1项目Euler解决方案#3(Java):调试,java,debugging,Java,Debugging,不久前,我开始了Euler项目的工作,我已经完成了问题3的代码。任务是找到大数(600851475143)中的最大素因子。我已经用Java完成了代码,但是我有一个调试问题 链接 当我尝试运行它时,它返回以下错误: 线程“main”java.lang.IndexOutOfBoundsException中的异常:索引:1,大小:1 位于java.util.ArrayList.rangeCheck(ArrayList.java:653) 获取(ArrayList.java:429) 在main.mai
位于java.util.ArrayList.rangeCheck(ArrayList.java:653)
获取(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));
}
}
}
import java.util.ArrayList;
导入java.util.List;
公共班机{
公共静态void main(字符串[]args){
长n=600851475143L;
整数因子=1;
列表因子=新的ArrayList();
List pfactors=new ArrayList();
int位置=0;
int testn=1;
while(factor列表指示值在[0,size-1]范围内。因此,while
条件应为position
而不是从阅读消息开始定位。浏览异常的javadoc以了解它的含义以及抛出的时间。在代码中找到第24行。问问自己为什么在该行抛出此异常。如果找不到原因,请使用调试器。请尊重Project Euler不共享解决方案的愿望。([…]请您慎重考虑,不要发布任何可能会明确泄露如何解决特定问题的内容。
。我尝试了它,但后来它返回了相同的错误。列表中是否还有我可能遗漏的问题?@hydromend您在System.out.println行中也有相同的问题(pfacts.get(length));
(应该是length-1
而不是length
)。我认为这是一个解决方案,但当我尝试时,它说它超出了范围,因为从长度中减去1将使其为负值。我猜我的列表没有元素,这没有任何意义。你建议我怎么做?你必须检查列表是否为空(pfacts.isEmpty()
)。如果是,请不要访问该列表。如果您的算法本身不起作用,则应针对特定问题提出新问题。