我只是有一个我无法理解的小问题,希望我能得到一些帮助。 我想编写一个程序,使用命令行将信息输入我的程序,例如(java xx 10 20)。在我的程序中,我得到了类似的东西
int coffeeCups= Integer.parseInt(args[0]);
int coffeeShots= Integer.parseInt(args[1]);
if (args.length==0)
{
System.out.print ("No arguments..");
System.exit(0);
}
else if (args.length==1)
{System.out.println("not enough arg..");
System.exit(0);
}
else if (args.length>2)
{System.out.println("too many arg.");
System.exit(0);
}
else if (Integer.parseInt(args[0]<0) && Integer.oarseInt(args[1]<0)
{system.out.println("negative chain arg");
System.exit(0); }
else if (Integer.parseInt(args[0]<0) || Integer.oarseInt(args[1]<0)
{system.out.println("negative arg");
System.exit(0);}
我想只输入两个正整数进入我的命令行..否则它应该拒绝我的输入,但事实是我有时会带来这样的错误(线程中的异常“主”java.lang.ArrayIndexOutOfBoundsException: 0)有时我的程序运行甚至没有在命令行中输入任何两个整数... 我必须尽快完成我的代码,我很感激你的帮助 附:因为我的程序尚未完成,所以不要担心我的身份
答案 0 :(得分:0)
首先,您可能想要使用command-line-arguments parsing facility。
您正在尝试访问不存在的索引:
// who said there is a first argument?
int coffeeCups = Integer.parseInt(args[0]);
// who said there is a second argument?
int coffeeShots = Integer.parseInt(args[1]);
您需要先检查,然后访问:
// this is just like using sentinel value. If you're not familiar with
// shortend `if` see notes.
int coffeeCups = args.length > 1 ? Integer.parseInt(args[0]) : null;
int coffeeShots = args.length > 2 ? Integer.parseInt(args[1]) : null;
if (coffeeCups == null || coffeeShots == null){
throw new Exception("Not enough arguments");
}
if (args.length > 2){
throw new Exception("Too many arguments");
}
还存在参数不是Integer
的情况。如果是这样的话,你会得到NumberFormatException
......
备注:强>
短if
符号(x ? y : z
)用于在y
为真的情况下返回x
,否则返回z
。