我正试图将字符串数组参数从main传递到我的integerCheck
方法中。主输入的长度永远不会超过3个字符串。代码编译得很好,但当我尝试输入3个字符串时,我会得到以下错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
这是从哪里来的?
private static void integerCheck(String[] b)
{
int i;
for(i=0;i<4;i++)
{
try {Integer.parseInt(b[i]);}
catch (NumberFormatException e)
{
System.err.println("one of inputs not an int");
System.exit(1);
}
}
}
public static void main(String[] args)
{
integerCheck(args);
}
应该是:for(i=0;i<3;i++)
(如果您将4
元素传递给程序,它应该与4
一起工作,但如果您只想要3
输入,它应该是3
)。
为什么
因为for(i=0;i<4;i++)
正在0 1 2 3
上运行。所以期望输入的长度实际上是4
。所以你正试图到达b[3]
,这是java.lang.ArrayIndexOutOfBoundsException
。
注意:调试器会帮你很多忙。。使用它,你会更好地理解问题!
非常简单的错误。如果数组中有3个元素,则它们的索引分别为0、1和2。循环从0变为小于4,这意味着它尝试访问元素0、1、2和3。元素3不存在,因为您只给出了3个参数。另一种思考方式是,元素编号3是数组中的第四个元素(因为元素从0开始编号)
您的for(i=0;i<4;i++)
比string[b]
具有更多元素
试试这个并替换
for(i=0;i<4;i++)
带有
for(i=0;i<b.length;i++)
试试这个
private static void integerCheck(String[] b)
{
int i;
for(i=0;i<3;i++)
{
try {Integer.parseInt(b[i]);}
catch (NumberFormatException e)
{
System.err.println("one of inputs not an int");
System.exit(1);
}
}
}
public static void main(String[] args)
{
if(args.length==3)
{
integerCheck(args);
}
}
代码编译良好,因为您编写的代码中没有语法错误。java.lang.ArrayIndexOutOfBoundsException是一个运行时异常,当您试图访问超出数组大小的索引时会遇到此异常。
在当前情况下,每当您在调用main方法时传递的Arguments少于4个时,就会遇到这种情况。请记住,java中的索引是基于0的,因此您有0、1、2和3。
根据您所说的语句,u正在传递3个args,它们分别位于0 1和2,因此要么传递第4个值,要么将条件更改为for(i=0;i<2;i++)。