Java 这个代码有什么问题?为什么会出现这个错误?如何删除此项?
我使用Java实现了这段代码。它给了我一个错误,说java.lang.ArrayIndexOutOfBoundsException 我不知道为什么?此外,我还更改了我声明的整数int op=0;翻倍,不换钱。该程序适用于+、/和-。但不适用于*。为什么会这样? 代码如下:Java 这个代码有什么问题?为什么会出现这个错误?如何删除此项?,java,jakarta-ee,Java,Jakarta Ee,我使用Java实现了这段代码。它给了我一个错误,说java.lang.ArrayIndexOutOfBoundsException 我不知道为什么?此外,我还更改了我声明的整数int op=0;翻倍,不换钱。该程序适用于+、/和-。但不适用于*。为什么会这样? 代码如下: class test { public static void main(String [] mySpace) { double op=0; if (mySpace[0].equals(
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//
如果访问mySpace[0],数组必须至少有一个元素;否则您将获得ArrayIndexOutOfBoundsException。mySpace也是如此[1]
因此,在尝试访问数组的任何成员之前,请使用mySpace.length检查数组的实际长度。法律索引范围从0到mySpace.length-1;但你可能知道这一点
如果您的问题不是关于异常本身,而是关于为什么Java没有收到您认为传递给它的命令行参数,那么作为第一步,使用
System.out.println(Arrays.toString(mySpace));
诊断Java实际收到了什么
特别是,*在许多与命令行解析相关的情况下具有特殊意义。如果访问mySpace[0],数组必须至少有一个元素;否则您将获得ArrayIndexOutOfBoundsException。mySpace也是如此[1]
因此,在尝试访问数组的任何成员之前,请使用mySpace.length检查数组的实际长度。法律索引范围从0到mySpace.length-1;但你可能知道这一点
如果您的问题不是关于异常本身,而是关于为什么Java没有收到您认为传递给它的命令行参数,那么作为第一步,使用
System.out.println(Arrays.toString(mySpace));
诊断Java实际收到了什么
特别是,*在许多与命令行解析相关的情况下具有特殊意义。您需要传递命令行参数。然后你就可以接近他们了。您访问时未传递任何命令行参数。那么mySpace.length将为0
但是您使用的mySpace[0]不存在任何元素您需要传递命令行参数。然后你就可以接近他们了。您访问时未传递任何命令行参数。那么mySpace.length将为0
但是您使用的mySpace[0]不存在任何元素您没有向应用程序传递任何内容,因此mySpace数组的大小为0。试用
java test 123
您没有向应用程序传递任何内容,因此mySpace数组的大小为0。试用
java test 123
编辑
这是因为*是一个shell通配符:它对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
但是当我发出命令的时候
java Test.java * , it will print false
java Test.java "*" // it will print true
编辑
这是因为*是一个shell通配符:它对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
但是当我发出命令的时候
java Test.java * , it will print false
java Test.java "*" // it will print true
mySpace字符串数组应该是运行应用程序时给出的参数列表。可能调用程序时根本没有参数。您应该检查mySpace conatin中的参数是否有任何值。不要从IDE执行,执行manuallu by:>>java classNameparameter@Ozil现在检查我的answerWell mySpace字符串数组应该是运行应用程序时给出的参数列表。可能调用程序时根本没有参数。您应该检查mySpace conatin中的参数是否有任何值。不要从IDE执行,执行manuallu by:>>java classNameparameter@Ozil现在检查我的回答我传递了三个参数,分别对应于mySpace[0]、mySpace[1]、mySpace[2]。该程序适用于+、/和-。但不适用于*。为什么会这样?@Ozil这是因为*是Windows命令提示符中的通配符。我传递了三个参数,分别对应于mySpace[0]、mySpace[1]、mySpace[2]。该程序适用于+、/和-。但不适用于*。为什么会这样?@Ozil这是因为*是windows命令提示符中的通配符