*功课
使用命令行命令
java class -add 7 8
将在" -add"之后添加所有整数。但对于这个程序,我也打算打印#34;参数类型不匹配"如果有什么事后" -add"不是整数。
我有这个方法在String中搜索整数。如果它找到的不是整数,则返回false。
public static boolean isInteger(String s) {
try {
int num = Integer.parseInt(s);
return true;
} catch (Exception e) {}
return false;
}
现在在这个方法中,我尝试使用isInteger方法查看第一个for循环中的String。
private static void add(String[] args) {
for (int j = 1; j < args.length; j++) {
if (isInteger(args[j]) == false)
System.out.println("Argument type mismatch");
}
if (args.length == 1)
System.out.println("Argument count mismatch");
else {
int result = 0;
for (int i = 1; i < args.length; i++) {
result += Integer.parseInt(args[i]);
}
System.out.println(result);
}
}
单独运行第一个for循环会产生&#34;参数类型不匹配&#34;非常好。但是当我运行整个方法并输入命令
时java class -add cat
它产生&#34;参数类型不匹配&#34;后跟一个 java.lang.NumberFormatException:输入字符串:&#34; cat&#34; 错误结果+ = Integer.parseInt(args [i]);
如何解决此错误?
答案 0 :(得分:4)
您收到错误,因为一旦发现输入存在问题,您就不会终止执行。
在遇到问题时执行的代码中添加return;
语句:
for (int j = 1; j < args.length; j++) {
if (!isInteger(args[j])) {
System.out.println("Argument type mismatch");
return; // Added this line
}
}
另请注意if
条件的轻微变化。它不是与布尔文字进行比较的更好的编码风格,即改变:
if (isInteger(args[j]) == false)
到
if (!isInteger(args[j]))
这是良好的编码实践的原因是它可以防止这种情况发生:
// Oops! An assignment that compiles and executes as "true"
if (someBooleanVariable = true)
当您打算编码比较时:
if (someBooleanVariable == true)
视觉差异很微妙,如果你没有视觉上的捡起,可能会导致令人沮丧的错误,但如果你编码,则不会出现这个问题:
if (someBooleanVariable)
答案 1 :(得分:2)
它打印Argument type mismatch
,但您不会结束您的程序。您可以在@Bohemian建议中添加return
语句,也可以使用if结构,如下所示。我个人不喜欢函数中间的return
语句。选择适合您的解决方案:)
尝试这样的事情:
private static void add(String[] args)
{
if (args.length <= 1) // Validate number of arguments
{
System.out.println("Argument count mismatch");
}
else // Number of arguments valid
{
// Validate that we received only numbers
boolean allIntegerValid = true;
for (int j = 1; j < args.length; j++)
{
allIntegerValid = allIntegerValid && isInteger(args[j]);
}
if (allIntegerValid) // We received only numbers
{
int result = 0;
for (int i = 1; i < args.length; i++)
{
result += Integer.parseInt(args[i]);
}
System.out.println(result);
}
else // At least one argument was not a number
{
System.out.println("Argument type mismatch");
}
}
}