我在其中一个视频教程中看到了下面的代码。它执行得很好,但是当我尝试在我的系统中执行时,它编译得很好,但我收到运行时错误说,
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);
}
}
有人可以指导我这段代码有什么问题以及如何纠正?
提前致谢!
答案 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这样更安全。
希望这对您有用:)