首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >项目Euler解决方案#3 (Java):调试

项目Euler解决方案#3 (Java):调试
EN

Stack Overflow用户
提问于 2015-06-28 15:51:57
回答 1查看 148关注 0票数 3

我最近开始研究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)

这是我的密码:

代码语言:javascript
复制
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));
        }
    }
}

我不想要这个问题的解决方案,只是一种解决问题的方法。

EN

回答 1

Stack Overflow用户

发布于 2015-06-28 15:54:47

列表元素在0大小的范围内,所以您的while条件应该是position < factors.size()而不是position <= factors.size()。否则,只要factors.get(position)等于factors.size()position就会抛出一个factors.size()

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31101728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档