java.lang.NumberFormatException修复?整数字符串

时间:2014-10-07 01:06:49

标签: java

*功课

使用命令行命令

  

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

如何解决此错误?

2 个答案:

答案 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");
        }
    } 
}