java—为什么会创建indexoutofbounds错误,我该如何修复它?

z9zf31ra  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(300)

我只是想写一个小程序,列出10到1000之间的所有素数,但它总是报告错误(primefinder.main中长度为0的索引0超出了范围),我不确定哪里出错了。

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);
            }
        }
    }
}
e5nqia27

e5nqia271#

根据,

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;
}

主回路中的for回路应进行如下修正:,

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

相关问题