【问题标题】:Project Euler Solution #3 (Java): DebuggingProject Euler 解决方案 #3 (Java):调试
【发布时间】: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.

标签: java debugging


【解决方案1】:

列表索引在 [0, size - 1] 范围内。所以你的while 条件应该是position &lt; factors.size() 而不是position &lt;= factors.size()。否则,只要position 等于 factors.size()factors.get(position) 就会抛出 IndexOutOfBoundsException

【讨论】:

  • 我试过了,但后来它返回了同样的错误。我可能遗漏的列表是否还有其他问题?
  • @hydromend 你在System.out.println(pfactors.get(length)); 行有同样的问题(应该是length - 1 而不是length)。
  • 我认为这将是一个解决方案,但是当我尝试它时,它说它超出了范围,因为从长度中减去 1 会使其变为负数。我想我的列表没有任何元素,这没有任何意义。你建议我做什么?
  • 你必须检查列表是否为空(pfactors.isEmpty())。如果是这样,请不要访问该列表。如果您的 算法 本身不起作用,您应该针对特定问题提出一个新问题。
猜你喜欢
  • 1970-01-01
  • 2011-03-03
  • 2013-07-30
  • 2016-04-30
  • 2023-03-15
  • 1970-01-01
  • 2022-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多