将主要参数传递给方法[关闭]
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
将在您的循环中具有值 0
、1
、2
、3
。具有三个元素的数组将具有索引 0
、1
、2
。
【参考方案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
。
注意:调试器会对你有很大帮助。使用它,你会更好地理解问题!
【讨论】:
【参考方案2】:非常简单的错误。如果数组中有 3 个元素,它们的索引为 0、1 和 2。您的循环从 0 变为小于 4,这意味着它试图访问元素 0、1、2 和 3。元素 3 不存在,因为您只给出了 3 个论点。另一种思考方式是,元素编号 3 是数组中的第四个元素(因为元素从 0 开始编号)
【讨论】:
【参考方案3】:您的for(i=0;i<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
【讨论】:
以上是关于将主要参数传递给方法[关闭]的主要内容,如果未能解决你的问题,请参考以下文章