我是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中传递参数。