【问题标题】:passing main argument to method [closed]将主要参数传递给方法[关闭]
【发布时间】:2013-01-25 03:14:32
【问题描述】:

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

【问题讨论】:

  • 想想如果只传递 3 个参数,循环将运行多少次。
  • i 将在您的循环中具有值 0123。具有三个元素的数组将具有索引 012

标签: java arrays string main


【解决方案1】:

应该是:for(i=0;i&lt;3;i++)(如果您将4 元素传递给您的程序,它应该与4 一起工作,但如果您只需要3 输入,它应该是3)。

为什么?

因为for(i=0;i&lt;4;i++)0 1 2 3 上运行。所以预期输入的长度实际上是4。所以你想联系b[3],这里是java.lang.ArrayIndexOutOfBoundsException

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您的for(i=0;i&lt;4;i++) 的元素比string[b]

      试试这个并替换

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

       for(i=0;i<b.length;i++)
      

      【讨论】:

        【解决方案4】:

        试试这个

         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);
            }
        }
        

        【讨论】:

          【解决方案5】:

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-09-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-03
            • 2011-07-23
            • 2017-01-05
            相关资源
            最近更新 更多