【问题标题】:Simple Java Code Error, Exception in thread "main"简单的 Java 代码错误,线程“main”中的异常
【发布时间】:2012-12-31 20:26:54
【问题描述】:

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

【问题讨论】:

标签: java exception main


【解决方案1】:

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

【讨论】:

  • 谢谢,这对我有用。但在 Eclipse 中,我只需将 20 和 30 放在那里。还有一个问题,是否有可能摆脱这些参数?我该如何替换它们?
  • 要摆脱这些参数,您可以将值分配给代码中的变量或以某种不同的方式接受输入。我们先看代码:int p = 20;整数q = 30;除此之外,您可以使用一些 java swing 对话框来接受 Web 应用程序或 Scanner 类中的输入或文本框,以从命令行接受用户输入。只需搜索关键字 swing dialog、HTML 文本框和 Scanner 类即可开始
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    如果你使用 eclipse IDE 检查,How to pass command line args

    【讨论】:

      【解决方案4】:

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

      在 Eclipse 中,您应该转到 Run configuration 并在 Program arguments 文本区域中添加参数。

      【讨论】:

        【解决方案5】:
        int p = Integer.parseInt(args[0]);
        int q = Integer.parseInt(args[1]);
        

        您的程序需要两个参数。

        第一个参数:p

        第二个参数:q

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

        java BinaryGCD 10 10
        

        【讨论】:

          【解决方案6】:

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

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-02-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多