简单Java代码错误,线程中出现异常;“主要”;

简单Java代码错误,线程中出现异常;“主要”;,java,exception,main,Java,Exception,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

我是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));
}
公共类二进制gcd{
公共静态int gcd(int p,int q){
如果(q==0)返回p;
如果(p==0)返回q;
//p和q偶数
如果((p&1)==0&(q&1)==0)返回gcd(p>>1,q>>1)>1,q);
//p是奇数,q是偶数
否则如果((q&1)==0)返回gcd(p,q>>1);
//p和q奇数,p>=q
否则,如果(p>=q)返回gcd((p-q)>>1,q);
//p和q奇数,p>1);
}
公共静态void main(字符串[]args){
int p=Integer.parseInt(args[0]);
intq=Integer.parseInt(args[1]);
System.out.println(“gcd(“+p+”,“+q+””)=“+gcd(p,q));
}
}

在Eclipse中,我遇到以下错误:

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

有人能告诉我该怎么做才能让代码正常工作吗

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));
}

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

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

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

如果您使用的是EclipseIDECheck,

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


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

您没有使用命令行参数调用程序。使用java二进制GCD 20 30 您可以用任何其他数字替换上述示例中的20 30

int p = Integer.parseInt(args[0]);
int q = Integer.parseInt(args[1]);
程序需要两个参数

第一个arg:p

第二个参数:q

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

java BinaryGCD 10 10

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

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

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


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

重复“谢谢”,这对我很有用。但在Eclipse中,我只需要将20和30放在那里。还有一个问题,有没有可能摆脱这些ARG?如何替换它们?要去掉这些参数,可以在代码中为变量赋值,也可以以不同的方式接受输入。让我们先看看代码:int p=20;int q=30;除此之外,您还可以使用一些JavaSwing对话框接受来自命令行的用户输入,从而在web应用程序或Scanner类中接受输入或文本框。只需搜索关键字swing对话框、HTML文本框和Scanner类即可开始