如何克服Integer.parseInt(args [0])的ArrayIndexOutOfBoundException?

时间:2016-01-11 11:50:22

标签: java exception-handling indexoutofboundsexception parseint

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

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);
    }
}

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

提前致谢!

6 个答案:

答案 0 :(得分:3)

在运行代码时,您似乎没有传递任何参数。

Java doc for ArrayIndexOutOfBoundsException:' Thrown指示已使用非法索引访问数组。索引为负数或大于或等于数组的大小。'

因此,您尝试从索引为0的args数组中提取值,但该数组小于此大小(在这种情况下,它是空的)。

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

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

答案 1 :(得分:2)

if (args.length > 0) {
   Integer.parseInt(args[0])
}

答案 2 :(得分:0)

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

  

java Test13 123

然后输出应该是: 123

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

答案 3 :(得分:0)

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

您将能够运行您的程序

答案 4 :(得分:0)

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

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 < / em> args [2] = 30

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

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

答案 5 :(得分:0)

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

1。您可能没有实际传递参数就运行了此命令 [0]:

执行此操作时,该数组的长度为0,因为没有参数传递给主函数。程序将根据您的代码运行。

$ java Test13

这将给出错误输出。您获得的一个,但Array例外。

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

$ java Test13 727

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

类似地,假设您有更多的参数,例如[0],[1]和[2],并且您忘记像命令2中那样在'727'之后添加数字。您必须得到类似的错误。除非您这样做(为命令提供三个输入):

$ java Test13 727 837 9

这意味着您需要在run命令本身中输入您的输入。但是,在代码中带有'cin'的C ++中,可以在运行第一个命令后进行输入。尽管这里没有真正的威胁,但Java这样更安全。

希望这对您有用:)