Project Euler Solution#3(Java):调试

时间:2015-06-28 15:51:57

标签: java debugging

我最近刚开始使用Project Euler,我已经完成了问题#3的代码。任务是找到大数的最大素数因子(600851475143)。我已经用Java完成了代码,但是我遇到了调试问题。

Here's链接。

当我尝试运行它时,它会返回以下错误:

  

线程“main”中的异常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));
        }
    }
}

我不想解决这个问题,只是修复错误的方法。

1 个答案:

答案 0 :(得分:4)

列表indizes在[0,size - 1]范围内。因此,while条件应为position < factors.size()而不是position <= factors.size()。否则,只要factors.get(position)等于IndexOutOfBoundsExceptionposition就会factors.size()。{/ p>