如何克服 Integer.parseInt(args[0]) 的 ArrayIndexOutOfBoundException?
How can I overcome ArrayIndexOutOfBoundException for Integer.parseInt(args[0])?
我在其中一个视频中看到了下面的代码 tutorial.There 它执行得很好,但当我试图在我的系统中执行时,它编译得很好,但我收到运行时错误提示,
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);
}
}
有人可以指导我这段代码有什么问题以及如何纠正吗?
提前致谢!
if (args.length > 0) {
Integer.parseInt(args[0])
}
您 运行 您的代码似乎没有传递任何参数。
来自Java doc for ArrayIndexOutOfBoundsException:'Thrown to indicate that an array has been accessed with an illegal index. The index is either negative or greater than or equal to the size of the array.'
因此您试图从索引为 0 的 args 数组中提取一个值,但该数组小于此大小(在本例中为空)。
为了防止抛出异常,您可以对语句进行大小检查。
if(args.length>0) {
int i = Integer.parseInt(args[0]);
System.out.println(i);
}
您应该在执行应用程序时向主方法传递一个参数。
例如,在命令行中输入:
java Test13 123
那么输出应该是:
123
此外,您可以通过检查 args.length 来检查参数可用性,就像 Adam 在上一个回答中所说的那样。
您在 运行 运行您的程序时没有传递任何参数。如果您从命令行 运行ning 则写 java Test13 1
。您将能够在输出中获得结果。
如果您使用 eclipse 来 运行 您的程序,那么请在 "Run Configuration" -> 参数选项卡 -> 程序参数文本框 -> 中提供您的参数 -> 将值设为 1.
您将能够运行您的程序
ArrayIndexOutOfBoundsException 当您尝试访问数组中不存在的索引处的元素时发生。
例如:假设 int a[]={2,4,5,10,3} 是一个数组。
数组大小为5,索引从0开始。
这意味着您的数组范围从索引 0 到索引 4,其中索引 0 处的元素是第一个元素,即 2,索引 4 处的元素是最后一个元素,即 3
如果您尝试访问不在 0 到 4 范围内的索引处的任何元素,它将向您显示 ArrayIndexOutOfBoundsException 因为数组中不存在这样的索引。
现在在你的情况下 args 是命令行参数,这意味着当你 运行 你的代码时你必须传递参数。
如果您从终端 运行ning 您的代码,那么在 java 您的类名 之后,您必须传递参数。
例如:java你的班级名10 20 30
这里 10 20 30 是你的命令行参数,它们存储在你的 args 数组和 args[0]=10 args[1]=20 args[2]=30
如果您在 运行ning 代码期间未传递任何参数,您的 args 为空,因此您将得到 ArrayIndexOutOfBoundsException
希望它能帮助您理解命令行参数的概念。
这是一个 运行 时间错误,因为您可能已经观察到编译进行得很顺利。现在,为什么会发生这种情况是因为您必须在给出 运行 命令时传递“参数”(如 2)
1.您可能有 运行 这个命令,但实际上没有传递参数 [0]:
执行此操作时,数组的长度为 0,因为没有参数传递给主函数。根据您的代码,程序应该如何 运行。
$ java Test13
这将给出一个错误输出。你得到的那个,数组异常。
2。尝试 运行 执行此命令,即在命令中键入一个数字:
$ java Test13 727
在这里,您将参数 [0] 作为 727 传递给主函数。它将元素添加到您的数组中。这应该可以正常工作。
类似地,假设您有更多参数,例如 [0]、[1] 和 [2],并且您忘记像在命令 2 中那样在“727”之后添加数字。您一定会遇到类似的错误。除非你这样做(为你的命令提供三个输入):
$ java Test13 727 837 9
这意味着您需要在 运行 命令本身期间提供您的输入。但是,在代码中带有 'cin'
的 C++ 中,您可以在第一个命令 运行 之后提供输入。 Java 这样更安全,尽管这里不存在真正的威胁。
希望这对你有用:)
我在其中一个视频中看到了下面的代码 tutorial.There 它执行得很好,但当我试图在我的系统中执行时,它编译得很好,但我收到运行时错误提示,
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);
}
}
有人可以指导我这段代码有什么问题以及如何纠正吗?
提前致谢!
if (args.length > 0) {
Integer.parseInt(args[0])
}
您 运行 您的代码似乎没有传递任何参数。
来自Java doc for ArrayIndexOutOfBoundsException:'Thrown to indicate that an array has been accessed with an illegal index. The index is either negative or greater than or equal to the size of the array.'
因此您试图从索引为 0 的 args 数组中提取一个值,但该数组小于此大小(在本例中为空)。
为了防止抛出异常,您可以对语句进行大小检查。
if(args.length>0) {
int i = Integer.parseInt(args[0]);
System.out.println(i);
}
您应该在执行应用程序时向主方法传递一个参数。 例如,在命令行中输入:
java Test13 123
那么输出应该是: 123
此外,您可以通过检查 args.length 来检查参数可用性,就像 Adam 在上一个回答中所说的那样。
您在 运行 运行您的程序时没有传递任何参数。如果您从命令行 运行ning 则写 java Test13 1
。您将能够在输出中获得结果。
如果您使用 eclipse 来 运行 您的程序,那么请在 "Run Configuration" -> 参数选项卡 -> 程序参数文本框 -> 中提供您的参数 -> 将值设为 1.
您将能够运行您的程序
ArrayIndexOutOfBoundsException 当您尝试访问数组中不存在的索引处的元素时发生。
例如:假设 int a[]={2,4,5,10,3} 是一个数组。
数组大小为5,索引从0开始。
这意味着您的数组范围从索引 0 到索引 4,其中索引 0 处的元素是第一个元素,即 2,索引 4 处的元素是最后一个元素,即 3
如果您尝试访问不在 0 到 4 范围内的索引处的任何元素,它将向您显示 ArrayIndexOutOfBoundsException 因为数组中不存在这样的索引。
现在在你的情况下 args 是命令行参数,这意味着当你 运行 你的代码时你必须传递参数。
如果您从终端 运行ning 您的代码,那么在 java 您的类名 之后,您必须传递参数。
例如:java你的班级名10 20 30
这里 10 20 30 是你的命令行参数,它们存储在你的 args 数组和 args[0]=10 args[1]=20 args[2]=30
如果您在 运行ning 代码期间未传递任何参数,您的 args 为空,因此您将得到 ArrayIndexOutOfBoundsException
希望它能帮助您理解命令行参数的概念。
这是一个 运行 时间错误,因为您可能已经观察到编译进行得很顺利。现在,为什么会发生这种情况是因为您必须在给出 运行 命令时传递“参数”(如 2)
1.您可能有 运行 这个命令,但实际上没有传递参数 [0]:
执行此操作时,数组的长度为 0,因为没有参数传递给主函数。根据您的代码,程序应该如何 运行。
$ java Test13
这将给出一个错误输出。你得到的那个,数组异常。
2。尝试 运行 执行此命令,即在命令中键入一个数字:
$ java Test13 727
在这里,您将参数 [0] 作为 727 传递给主函数。它将元素添加到您的数组中。这应该可以正常工作。
类似地,假设您有更多参数,例如 [0]、[1] 和 [2],并且您忘记像在命令 2 中那样在“727”之后添加数字。您一定会遇到类似的错误。除非你这样做(为你的命令提供三个输入):
$ java Test13 727 837 9
这意味着您需要在 运行 命令本身期间提供您的输入。但是,在代码中带有 'cin'
的 C++ 中,您可以在第一个命令 运行 之后提供输入。 Java 这样更安全,尽管这里不存在真正的威胁。
希望这对你有用:)