将主参数传递给方法



我正试图将字符串数组参数从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++)。

相关内容

  • 没有找到相关文章

最新更新