1

我使用 Java 实现了这段代码。它给了我一个错误说“ java.lang.ArrayIndexOutOfBoundsException”我不确定为什么?此外,我将我声明的整数 (int op=0;) 更改为加倍,没有任何变化。该程序适用于 +、/ 和 -。但不适用于 *. 为什么呢?这是代码:

class test {
    public static void main(String [] mySpace) {
        double op=0;
        if (mySpace[0].equals("*")) {
             op=Integer.parseInt(mySpace[1])*Integer.parseInt(mySpace[2]);
        }
        System.out.println("Heya! "+ op);
    }
}

编辑:我在命令提示符中使用了这些命令:

javac test.java // 用于编译我的名为 test.java 的源文件

java test * 10 20 //用于执行

4

4 回答 4

5

如果访问mySpace[0],则数组必须至少有一个元素;否则你会得到ArrayIndexOutOfBoundsException. 同样对于mySpace[1]

因此mySpace.length,在尝试访问其任何成员之前,请使用检查数组的实际长度。合法索引范围从 0 到mySpace.length-1; 但你可能知道。

如果您的问题不是关于异常本身,而是关于为什么 Java 没有收到您认为传递给它的命令行参数,那么作为第一步使用

System.out.println(Arrays.toString(mySpace));

诊断 Java 实际收到的内容。

特别*是在许多与命令行解析相关的情况下具有特殊的意义。

于 2013-06-06T13:22:18.817 回答
1

您需要传递命令行参数。然后你就可以访问它们了。您在没有传递任何命令行参数的情况下访问。mySpace.length那么将为 0

但是您使用mySpace[0]的是不存在任何元素

于 2013-06-06T13:23:04.407 回答
1

您没有将任何内容传递到您的应用程序中,因此数组的大小mySpace0. 尝试使用

java test 123
于 2013-06-06T13:23:24.340 回答
1

编辑

这是因为*它是一个 shell 通配符:它对 shell 具有特殊含义,它在将其传递给命令(在本例中为 java)之前对其进行扩展。

由于您需要文字*,因此您需要将其从外壳中转义。转义的确切方式因您的 shell 而异,但您可以尝试:

java test "*" 10 20

看到这个代码

public class Test {

    public static void main(String args[]) {


        if(args[0].equals("*"))
        {
                   System.out.println("true");
                  }
                 else
                  System.out.println("false");

        }

}

现在当我发出命令时

java Test.java * , it will print false

但是当我发出命令时

java Test.java "*"  // it will print true
于 2013-06-06T13:34:07.487 回答