将main参数传递给方法

时间:2013-02-09 12:19:38

标签: java arrays string main

我正在尝试将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);
}

5 个答案:

答案 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 ++)。