我怎样才能修复java中的NumberFormatException

时间:2017-10-03 16:28:36

标签: java numberformatexception

嗨,我是Java的初学者,我正在尝试编写这个程序,我可以在其中输入数字,但是当我输入“done”时,我得到了我称为total,numberInputs的值。但是,当我运行它并输入“done”时,我在线程“main”中得到Exception java.lang.NumberFormatException:对于输入字符串:“done”。你知道我怎么解决这个问题吗?

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)

at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at repeat.numberReader(repeat.java:15)
at repeat.main(repeat.java:23)

这是我的代码:

import java.util.Scanner;

public class repeat{
    public void numberReader(){
        Scanner myScanner = new Scanner(System.in);
        int total = 1;
        int numberInputs = 1;
        String userInput;

        do {
            System.out.println("Enter a number: ");
            userInput = myScanner.nextLine();
            total = total + Integer.parseInt(userInput);
            numberInputs++;
        } while (!"done".equals(userInput));
        System.out.println(total + "" + numberInputs + "" + (total / numberInputs));
    }

    public static void main(String[] args){
        repeat instance = new repeat();
        instance.numberReader();
    }
}

感谢您的帮助

4 个答案:

答案 0 :(得分:1)

您正在检查userInput"done",但是在调用Integer.parseInt()之后这样做了。调用Integer.parseInt("done")会抛出NumberFormatException,因为字符串"done"无法解析为整数。

do {
  System.out.println("Enter a number: ");
  userInput = myScanner.nextLine();
  ***ERROR HERE***
  total = total + Integer.parseInt(userInput);
  numberInputs++;
} while (!"done".equals(userInput));
  System.out.println(total + "" + numberInputs + "" + (total / numberInputs));
}

您可以通过以下两种方式解决此问题。最简单的方法是重新排序代码,以便在收到代码后立即检查输入,然后再解析它。这确实需要两次提示(一次在循环之前,一次在底部。如果第一个条目是"done",这也会有问题,因为do-while循环总是执行至少一次您可以更改为标准while循环以避免这种情况。这也不会处理除预期"done"字符串以外的字符串。

System.out.println("Enter a number: ");
userInput = myScanner.nextLine();
do {
  total = total + Integer.parseInt(userInput);
  numberInputs++;
  System.out.println("Enter a number: ");
  userInput = myScanner.nextLine();
} while (!"done".equals(userInput));
  System.out.println(total + "" + numberInputs + "" + (total / numberInputs));
}

或者,您也可以实现错误处理来捕获和处理异常,但这有点复杂。这听起来像是家庭作业,错误处理可能超出了你的范围,所以我只考虑第一个选项。

作为旁注,您应该考虑将"done".equals(userInput)更改为userInput.equals("done")。它们在功能上是相同的,但第二个陈述更清楚你的意图是什么,即userInput"done"。第一个是让自己和其他人更难阅读和理解。

答案 1 :(得分:1)

您的代码存在问题

total = total + Integer.parseInt(userInput);

假设用户输入字符串“done”。

现在你的代码会尝试将字符串解析为整数,即

total=total+Integer.parseInt("done");

因此,会发生NumberFormatException。

正确的代码将是

import java.util.Scanner;

public class repeat{
    public void numberReader(){
        Scanner myScanner = new Scanner(System.in);
        int total = 1;
        int numberInputs = 1;
        String userInput;



        while (true)
        {
            System.out.println("Enter a number: ");
            userInput = myScanner.nextLine();
            if("done".equals(userInput))
            {
                System.out.println(total + "" + numberInputs + "" + (total / numberInputs));
                break;
            }
            else
            {
                total = total + Integer.parseInt(userInput);
                numberInputs++;
            }
        }
    }

    public static void main(String[] args){
        repeat instance = new repeat();
        instance.numberReader();
    }
}

答案 2 :(得分:0)

你需要检查输入是否已完成"在使用Integer.parseInt(userInput)

之前
        do {
            System.out.println("Enter a number: ");
            userInput = myScanner.nextLine();
            if(!"done".equals(userInput)){
            total = total + Integer.parseInt(userInput);
            numberInputs++;
            }

        } while (!"done".equals(userInput));
            System.out.println(total + "" + numberInputs + "" + (total / numberInputs));
        }

答案 3 :(得分:0)

正如网站NumberFormatException所示,异常是由于尝试将不表示数字的字符串转换为整数而引起的,在这种情况下:“done”

此行触发了异常:

total = total + Integer.parseInt(userInput);

您可以按照以下方式避免和处理此异常:

public class repeat{
    public void numberReader(){
        Scanner myScanner = new Scanner(System.in);
        int total = 1;
        int numberInputs = 1;
        String userInput;

        boolean done = false; // Stop when true

        do {
            System.out.println("Enter a number: ");
            userInput = myScanner.nextLine();
            try{        // Managing the exception
                total = total + Integer.parseInt(userInput);
            } catch(NumberFormatException e){
                if ("done".equals(userInput)){  // it's done!!!!
                    done = true;
                }
            }
            numberInputs++;
        } while (!done);
            System.out.println(total + "" + numberInputs + "" + (total / numberInputs));
        }

    public static void main(String[] args){
        repeat instance = new repeat();
        instance.numberReader();
    }
}

Read more about the try / catch