为什么它会产生 indexoutofbounds 错误,我该如何解决?
Why it would create indexoutofbounds error and how do I fix it?
我只是想写一个小程序,列出 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);
}
}
}
}
根据,
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);
}
}
我只是想写一个小程序,列出 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);
}
}
}
}
根据,
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);
}
}