【问题标题】:How can I overcome ArrayIndexOutOfBoundException for Integer.parseInt(args[0])? [duplicate]如何克服 Integer.parseInt(args[0]) 的 ArrayIndexOutOfBoundException? [复制]
【发布时间】:2016-04-15 17:19:39
【问题描述】:

我在其中一个视频教程中看到了下面的代码。它执行得很好,但是当我尝试在我的系统中执行时,它编译得很好,但我收到运行时错误提示,

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0

class Test13 
{
    public static void main(String[] args) 
    {   
        int i = Integer.parseInt(args[0]);
        System.out.println(i);
    }
}

有人可以指导我这段代码有什么问题以及如何纠正吗?

提前致谢!

【问题讨论】:

  • 你如何开始你的主线?如果您不将参数传递给您的 main,那么您的 args 数组的长度将是 0,当您访问第一个元素时,这将导致 outOfBoundException
  • 发布您曾经运行过的 java 命令?你对args[0] 的期望值是多少?
  • 你应该运行java <classname> <args> . eg: java Test13 100

标签: java exception-handling indexoutofboundsexception parseint


【解决方案1】:
if (args.length > 0) {
   Integer.parseInt(args[0])
}

【讨论】:

    【解决方案2】:

    看起来你在运行代码时没有传递任何参数。

    来自Java doc for ArrayIndexOutOfBoundsException: '抛出以表明一个数组已被非法索引访问。索引为负数或大于或等于数组的大小。'

    因此,您尝试从索引为 0 的 args 数组中提取一个值,但该数组小于此大小(在本例中为空)。

    为了防止抛出异常,您可以对语句应用大小检查。

    if(args.length>0) {
        int i = Integer.parseInt(args[0]);
        System.out.println(i);
    }
    

    【讨论】:

      【解决方案3】:

      您应该在执行应用程序时将参数传递给您的 main 方法。 例如,在命令行中输入:

      java Test13 123

      那么输出应该是: 123

      此外,您可以通过检查 args.length 来检查参数的可用性,就像亚当在上一个回答中所说的那样。

      【讨论】:

        【解决方案4】:

        您在运行程序时没有传递任何参数。如果你是从命令行运行,那么写java Test13 1。您将能够在输出中获得结果。 如果您使用 eclipse 运行程序,请在“运行配置”->“参数”选项卡->“程序参数”文本框中提供参数 -> 将值设为 1。

        您将能够运行您的程序

        【讨论】:

          【解决方案5】:

          ArrayIndexOutOfBoundsException 当您尝试访问数组中不存在的索引处的元素时发生。

          例如:假设 int a[]={2,4,5,10,3} 是一个数组。

          数组大小为5,索引从0开始。

          这意味着您的数组范围从索引 0 到索引 4,其中索引 0 处的元素是第一个元素,即 2,索引 4 处的元素是最后一个元素,即 3

          如果您尝试访问不在 0 到 4 范围内的索引处的任何元素,它将显示 ArrayIndexOutOfBoundsException,因为数组中不存在这样的索引。

          现在在您的情况下,args 是命令行参数,这意味着您必须在运行代码时传递参数。

          如果您是从终端运行代码,那么在 java yourclassname 之后,您必须传递参数。

          例如:java yourclassname 10 20 30

          这里 10 20 30 是您的命令行参数,它们存储在您的 args 数组和 args[0]=10 args[1]=20 args[2]=30

          如果您在运行代码期间未传递任何参数,则您的 args 为空,因此您将收到 ArrayIndexOutOfBoundsException

          希望它能帮助您理解命令行参数的概念。

          【讨论】:

            【解决方案6】:

            这是一个运行时错误,您可能已经观察到编译进展顺利。现在,为什么会发生这种情况是因为您必须在给出运行命令时传递“参数”(如 2 所示)

            1.你可能已经运行了这个命令,但实际上并没有传递参数 [0]:

            当你这样做时,数组的长度为 0,因为没有参数传递给主函数。根据您的代码,程序应该如何运行。

            $ java Test13
            

            这将给出错误输出。你得到的那个,除了 Array 例外。

            2。尝试运行此命令,即在您的命令中键入一个数字:

            $ java Test13 727
            

            在这里,您将参数 [0] 作为 727 传递给主函数。它将元素添加到您的数组中。这应该可以正常工作。

            同样,假设您有更多参数,例如 [0]、[1] 和 [2],并且您忘记在命令 2 中的“727”之后添加数字。您一定会遇到类似的错误。除非您这样做(为您的命令提供三个输入):

            $ java Test13 727 837 9
            

            这意味着您需要在运行命令本身期间提供输入。但是,在您的代码中带有 'cin' 的 C++ 中,您可以在运行第一个命令后提供输入。 Java 以这种方式更安全,尽管这里不存在真正的威胁。

            希望这对你有用:)

            【讨论】:

              猜你喜欢
              • 2018-01-27
              • 1970-01-01
              • 1970-01-01
              • 2015-06-10
              • 2021-02-10
              • 2015-06-21
              • 2019-03-22
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多