我用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//执行
4条答案
按热度按时间inkz8wg91#
编辑
那是因为
*
是一个shell通配符:它对shell有特殊的意义,shell在将它传递给命令(在本例中是java)之前会展开它。既然你需要文字
*
,你得把它从壳里逃出来。具体的逃逸方式因外壳而异,但您可以尝试:查看此代码
}
现在当我发出命令
但当我发出命令
jljoyd4f2#
如果您访问
mySpace[0]
,数组必须至少有一个元素;否则你会ArrayIndexOutOfBoundsException
. 同样适用于mySpace[1]
.因此使用
mySpace.length
在尝试访问数组的任何成员之前检查数组的实际长度。法律指数从0到mySpace.length-1
; 但你可能知道。如果您的问题不是关于异常本身,而是关于为什么java没有收到您认为传递给它的命令行参数,那么首先使用
诊断java实际收到了什么。
特别地,
*
在许多与命令行解析相关的情况下具有特殊的意义。u2nhd7ah3#
您没有将任何内容传递到应用程序中,因此数组的大小
mySpace
是0
. 尝试使用k0pti3hp4#
您需要传递命令行参数。那你就可以接近他们了。您正在访问而不传递任何命令行参数。那么
mySpace.length
将为0但你用的是
mySpace[0]
不存在任何元素