0

我是 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: BinaryGCD.main 的 0(BinaryGCD.java:25)

4

6 回答 6

0

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

是的,您必须将 2 个参数传递给您的程序。您没有传递任何参数,因此args长度为 0,这就是您无法访问第一个和第二个值(索引 0 和 1)的原因。

于 2013-01-17T10:17:05.167 回答
0

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

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

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

于 2013-01-17T10:17:20.057 回答
0

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

在 Eclipse 中,您应该转到运行配置并在程序参数文本区域中添加参数。

于 2013-01-17T10:18:08.400 回答
0

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

于 2013-01-17T10:18:36.677 回答
0
int p = Integer.parseInt(args[0]);
int q = Integer.parseInt(args[1]);

你的程序需要两个参数。

第一个参数:p

第二个参数:q

尝试在命令行中运行您的课程:

java BinaryGCD 10 10
于 2013-01-17T10:19:02.710 回答
0

此代码需要传入两个参数,当您从 Eclipse 中启动程序时,您不会传入它们。

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

Java 有一个数组“args”,它会自动填充这些参数,因此当它尝试在数组内部查找这些参数时,它会抛出 ArrayIndexOutOfBoundsException(即,您正在数组中查找第一个和第二个元素,但是数组没有第一个和第二个元素)

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

于 2013-01-17T10:24:32.270 回答