这段代码有什么问题?为什么会出现这个错误?如何删除?

anhgbhbe  于 2021-06-30  发布在  Java
关注(0)|答案(4)|浏览(247)

我用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测试*10 20//执行

inkz8wg9

inkz8wg91#

编辑
那是因为 * 是一个shell通配符:它对shell有特殊的意义,shell在将它传递给命令(在本例中是java)之前会展开它。
既然你需要文字 * ,你得把它从壳里逃出来。具体的逃逸方式因外壳而异,但您可以尝试:

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
jljoyd4f

jljoyd4f2#

如果您访问 mySpace[0] ,数组必须至少有一个元素;否则你会 ArrayIndexOutOfBoundsException . 同样适用于 mySpace[1] .
因此使用 mySpace.length 在尝试访问数组的任何成员之前检查数组的实际长度。法律指数从0到 mySpace.length-1 ; 但你可能知道。
如果您的问题不是关于异常本身,而是关于为什么java没有收到您认为传递给它的命令行参数,那么首先使用

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

诊断java实际收到了什么。
特别地, * 在许多与命令行解析相关的情况下具有特殊的意义。

u2nhd7ah

u2nhd7ah3#

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

java test 123
k0pti3hp

k0pti3hp4#

您需要传递命令行参数。那你就可以接近他们了。您正在访问而不传递任何命令行参数。那么 mySpace.length 将为0
但你用的是 mySpace[0] 不存在任何元素

相关问题