【问题标题】:What is wrong in this code? Why is it giving this error? How this can be removed?这段代码有什么问题?为什么会出现此错误?这怎么能去掉?
【发布时间】:2013-06-06 13:20:53
【问题描述】:

我使用 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 //用于执行

【问题讨论】:

  • 好吧,“mySpace”字符串数组应该是您在运行应用程序时提供的参数列表。可能根本没有参数调用程序。您应该检查参数“mySpace”是否包含任何值。
  • 不要从IDE执行,通过:>> java className参数执行manuallu
  • @Ozil 现在检查我的答案

标签: java jakarta-ee


【解决方案1】:

如果访问mySpace[0],数组必须至少有一个元素;否则你会得到ArrayIndexOutOfBoundsExceptionmySpace[1] 也是如此。

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

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

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

诊断 Java 实际收到了什么。

尤其是*,在很多与命令行解析相关的情况下都有特殊的含义。

【讨论】:

  • 我传递了三个参数,分别对应 mySpace[0]、mySpace[1]、mySpace[2]。该程序适用于 +、/ 和 -。但不适用于 *.为什么会这样?
  • @Ozil 那是因为 * 是 windows 命令提示符中的通配符
【解决方案2】:

编辑

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

由于您需要文字 *,因此您需要将其从 shell 中转义。转义的具体方式因你的 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

【讨论】:

    【解决方案3】:

    您没有向应用程序传递任何内容,因此数组mySpace 的大小为0。尝试使用

    java test 123
    

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2010-10-19
        • 2020-07-26
        • 2011-12-27
        • 1970-01-01
        • 1970-01-01
        • 2019-10-27
        • 2013-01-29
        • 1970-01-01
        相关资源
        最近更新 更多