将主要参数传递给方法[关闭]

Posted

技术标签:

【中文标题】将主要参数传递给方法[关闭]【英文标题】: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 【参考方案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

【讨论】:

以上是关于将主要参数传递给方法[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

java中,如何用POST方法将参数传递给第三方网站

将状态作为参数传递给 switch

为啥我们将字符串数组作为参数传递给 main() 方法,为啥不传递任何集合类型或包装类型或原始类型?

如何将命令行参数传递给 WinForms 应用程序?

JQuery将'空参数传递给MVC控制器方法

将参数传递给 TWS 作业的 Cobol 程序