简单 Java 代码错误,线程"main"异常



我是Java的新手,但我正在尝试运行这个简单的代码。有人能解释我我应该做什么,使这个代码工作?

public class BinaryGCD {
public static int gcd(int p, int q) {
    if (q == 0) return p;
    if (p == 0) return q;
    // p and q even
    if ((p & 1) == 0 && (q & 1) == 0) return gcd(p >> 1, q >> 1) << 1;
    // p is even, q is odd
    else if ((p & 1) == 0) return gcd(p >> 1, q);
    // p is odd, q is even
    else if ((q & 1) == 0) return gcd(p, q >> 1);
    // p and q odd, p >= q
    else if (p >= q) return gcd((p-q) >> 1, q);
    // p and q odd, p < q
    else return gcd(p, (q-p) >> 1);
}
public static void main(String[] args) {
    int p = Integer.parseInt(args[0]);
    int q = Integer.parseInt(args[1]);
    System.out.println("gcd(" + p + ", " + q + ") = " + gcd(p, q));
}

}

在Eclipse中我得到以下错误:

线程"main"异常java.lang.ArrayIndexOutOfBoundsException: 0BinaryGCD.main (BinaryGCD.java: 25)

您没有使用命令行参数调用程序。使用java BinaryGCD 20 30您可以将上面示例中的2030替换为任何其他数字

有人能解释一下我应该怎么做才能使这段代码工作吗?

是的,你必须传递两个参数给你的程序。您没有传递任何参数,因此args的长度为0,这就是为什么您不能访问第一个和第二个值(索引0和1)。

你很可能没有传递命令行参数,

 int p = Integer.parseInt(args[0]);
    int q = Integer.parseInt(args[1]);

如果您正在使用eclipse IDE检查,如何传递命令行参数

args[0]是命令行的第一个参数。你可能没有传递任何参数,所以这是个问题。在这个程序中,你应该有两个参数。

在eclipse中您应该进入Run configuration并在Program arguments textarea中添加参数。

int p = Integer.parseInt(args[0]);
int q = Integer.parseInt(args[1]);

你的程序需要两个参数。

第一个参数:p

第二个参数:q

尝试在命令行中运行您的类:

java BinaryGCD 10 10

这段代码期望传入两个参数,当您从Eclipse中启动程序时,您没有传入它们。

代码不允许用户不传递参数,它不会试图发现它并给出一个用户友好的消息:-),而只是假设参数已经传递

Java有一个数组'args',它是自动填充这些参数,所以当它试图查看数组内部的这些,它抛出一个ArrayIndexOutOfBoundsException(即你正在寻找数组的第一个和第二个元素,但数组没有第一个和第二个元素)

上面的答案解释了如何在Eclipse中传递参数。

相关内容

  • 没有找到相关文章

最新更新