0

我正在尝试将字符串参数数组从 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);
}
4

5 回答 5

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

注意:调试器会对您有很大帮助..使用它,您会更好地理解问题!

于 2013-02-09T12:23:49.657 回答
0

很简单的错误。如果数组中有 3 个元素,它们的索引为 0、1 和 2。您的循环从 0 变为小于 4,这意味着它试图访问元素 0、1、2 和 3。元素 3 不存在,因为您只给出了 3 个论点。另一种思考方式是元素编号 3 是数组中的第四个元素(因为元素从 0 开始编号)

于 2013-02-09T12:23:41.700 回答
0

for(i=0;i<4;i++)的元素多于string[b]

试试这个并更换

 for(i=0;i<4;i++)

 for(i=0;i<b.length;i++)
于 2013-02-09T12:23:53.303 回答
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);
    }
}
于 2013-02-09T12:40:34.933 回答
0

代码编译良好,因为您编写的代码中没有语法错误。java.lang.ArrayIndexOutOfBoundsException 是一个运行时异常,当您尝试访问超出数组大小的索引时会遇到该异常。

在当前情况下,只要在调用 main 方法时传递的参数少于 4 个,您就会面临这种情况。请记住,Java 中的索引是基于 0 的,因此您有 0 1 2 和 3 。

根据你所说的,你正在传递 3 个参数,它们分别位于 0 1 和 2,所以要么传递第 4 个值,要么将条件更改为 for(i=0;i<2;i++)。

于 2013-02-09T12:46:12.827 回答