Java 为什么这个parseInt将数组抛出绑定异常?

Java 为什么这个parseInt将数组抛出绑定异常?,java,indexoutofboundsexception,Java,Indexoutofboundsexception,我试图找到两个参数的GCD,但在第36行,它抛出了BoundsException数组 线程“main”java.lang.ArrayIndexOutOfBoundsException中出现异常:0 位于Hcdno.main(Gcdno.java:36) 由于字符串[]args为空,您将收到错误 每当您使用命令提示符运行Java程序并希望传递参数时,就会使用String[]args。我认为您没有在命令提示符下运行Java程序,或者如果您正在运行Java程序,那么您没有传递参数,因此您得到的错误是S

我试图找到两个参数的GCD,但在第36行,它抛出了BoundsException数组

线程“main”java.lang.ArrayIndexOutOfBoundsException中出现异常:0 位于Hcdno.main(Gcdno.java:36)


由于
字符串[]args
为空,您将收到错误

每当您使用命令提示符运行Java程序并希望传递参数时,就会使用
String[]args
。我认为您没有在命令提示符下运行Java程序,或者如果您正在运行Java程序,那么您没有传递参数,因此您得到的错误是
String[]args
array为空。 由于要获得m和o的值,可以使用以下方法:

Scanner scan = new Scanner(System.in);
int m= scan.nextInt();
int o = scan.nextInt();

现在,当您运行Java程序时,它将等待您的输入,然后执行。

您得到了错误。因为没有为方法的args参数提供值

您可以使用以下格式运行应用程序

假设编译的Gcdno类的文件路径为“/home/himly/Gcdno.class”

运行以下命令

cd  /home/himly
java Gcdno 8 7

您有两个选择:

如果您使用IDE执行构建/运行任务,最好使用第二个选项。

#一,。启动程序时,请将数字括起来

在这种情况下,您需要转到保存java程序的目录并运行:

javac Gcdno.java 
java Gcdno 3 5 
#二,。用于从用户处获取输入

在您的情况下,您可以尝试:

Scanner scanner = new Scanner(System.in);
int m=scanner.nextInt();
int o=scanner.nextInt();
顺便说一下,您的
gcd
方法存在一些打字错误问题。我修正为:

static int gcd(int a, int b) {
    if (a == b) return a;
    if (a == 0 || b == 0) return 0;
    if (a > b) return gcd(a - b, b); // not hcd;
    return gcd(a, b - a); // not hcd;
}

异常显示错误发生在第36行。我要冒险说,这是在你做
args[0]
args[1]
的时候。您不会检查所提供参数的长度。除非您运行程序
java Gcdno arg0 arg1
(例如带有2个或更多参数),否则将出现此异常。没有定义
hcd
。在实际的程序中也是这样吗?在尝试使用数组索引之前,请检查
args
的长度。为了详细说明Ian的观点,未来的调试必须意识到异常不是来自parseInt。它来自代码中parseInt附近的一个表达式(即,如果该表达式成功,将成为parseInt的参数的表达式),但parseInt从未被调用。我建议您通过@Yug Singh answered
8重写您的应用程序,7
为什么中间有逗号?@Hearen谢谢你提醒我。我将重新编辑答案。感谢您的建议…不行,我们使用IDE传递参数?。因为它与命令提示符的工作原理相同,具有其他功能。
static int gcd(int a, int b) {
    if (a == b) return a;
    if (a == 0 || b == 0) return 0;
    if (a > b) return gcd(a - b, b); // not hcd;
    return gcd(a, b - a); // not hcd;
}