【问题标题】:Why it would create indexoutofbounds error and how do I fix it?为什么它会创建 indexoutofbounds 错误,我该如何解决?
【发布时间】:2021-07-04 06:48:40
【问题描述】:

我只是想写一个小程序,列出 10 到 1000 之间的所有素数,但它不断报告错误(索引 0 超出长度 0 在 PrimeFinder.main),我不确定我做错了什么。

  class PrimeFinder {

    static boolean isPrime(int n) {
        for (int x=2; x<=(int)Math.sqrt(n); x++) {
            if (n%x == 0) {
                return false; 
            }
        }
        return true; 
    }

    public static void main(String[] args) {
        if (args.length > 0) {
            System.out.println("usage: java PrimeFinder <max-range>");
            return;
        }

        int maxRange = Integer.parseInt(args[0]);
        for (int i=2; i > 10 && i < 1000; i++) {
            if (isPrime(i)) {
                System.out.println(i);
            }
        }
    }
}

【问题讨论】:

  • main中的if语句应该是if (args.length != 1) { ... }
  • 现在它只打印“usage...”语句,我想知道如何让它列出所有预期的素数。

标签: java for-loop primes


【解决方案1】:

根据,

if (args.length > 0) {
    System.out.println("usage: java PrimeFinder <max-range>");
    return;
}

您不希望程序有任何用户输入。如果有任何用户输入,那么您的程序将退出并在控制台中打印日志。如果没有用户输入,则流程将继续,然后使用该行,

int maxRange = Integer.parseInt(args[0]);

您正在评估args[],它实际上是空的。所以它会抛出IndexOutOfBound 错误

如果您不需要对用户输入执行任何验证(至少您没有对代码中的maxRange 做任何有用的操作),只需从代码中删除以下几行,

/*
if (args.length > 0) {
        System.out.println("usage: java PrimeFinder <max-range>");
        return;
    }

int maxRange = Integer.parseInt(args[0]);
*/

或者更正那里的逻辑。

例如:

if (args.length == 0) {
    System.out.println("usage: java PrimeFinder <max-range>");
    return;
}

main 中的 for 循环应该修正如下,

for (int i=11; i > 10 && i < 1000; i++) {
    if (isPrime(i)) {
        System.out.println(i);
    }
}

【讨论】:

  • 您好,感谢您的详细说明,但它似乎仍然没有打印任何内容,也没有错误报告。
  • @dfgfgg 更新了 asnwer。
  • 哦,天哪,我太白痴了……谢谢!
猜你喜欢
  • 1970-01-01
  • 2019-12-22
  • 2023-03-28
  • 2020-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-02
相关资源
最近更新 更多