我正在尝试将main数组中的字符串参数传递给我的integerCheck
方法。 main的输入永远不会超过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);
}
答案 0 :(得分:1)
应该是: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
。
注意:调试器可以帮到你很多..使用它,你就能更好地理解这个问题!
答案 1 :(得分:0)
非常简单的错误。如果数组中有3个元素,则它们被索引为0,1和2.您的循环从0变为小于4,这意味着它尝试访问元素0,1,2和3.元素3不存在,因为您只给了3个论点。另一种思考方式是元素3是数组中的第四个元素(因为元素从0开始编号)
答案 2 :(得分:0)
您的for(i=0;i<4;i++)
元素多于string[b]
试试这个并替换
for(i=0;i<4;i++)
与
for(i=0;i<b.length;i++)
答案 3 :(得分:0)
试试这个
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);
}
}
答案 4 :(得分:0)
代码编译正常,因为您编写的代码中没有语法错误。 java.lang.ArrayIndexOutOfBoundsException是一个运行时异常,当您尝试访问超出数组大小的索引时会遇到该异常。
在当前情况下,只要你在调用main方法时传递少于4个Argumnents,你就会遇到这种情况。 记住java中的指数是0,所以你有0 1 2和3。
根据你所说的声明,你正在传递3个args,它们分别位于0 1和2,因此要么传递第4个值要么将你的条件改为for(i = 0; i <2; i ++)。