为什么我得到错误“线程中的异常”主“java.util.InputMismatchException”

时间:2014-09-30 00:58:01

标签: java oop

我完成了一项简单的任务,创建了一个评分量表,可以为学生提供已提交值的字母等级。除了学生完成后,一切似乎都顺利进行 - 他们需要输入“E”退出程序...这是因为我收到此异常"Exception in thread "main" java.util.InputMismatchException"而丢失的地方。我知道结果是我遗失的小事,但我不知道这里是我目前的代码:

public static void main(String[] args) {

    int letterGrade;//The overall letter grade
    boolean prompt = true;
    while (prompt) {
        //Prompt the student to input their data
        System.out.print("Please enter your exam score, or press E to exit :");

        @SuppressWarnings("resource")
        Scanner keyboard = new Scanner(System.in);
        letterGrade = keyboard.nextInt();

        if ((letterGrade >= 90) & (letterGrade <= 100)) {
            System.out.println("The letter grade is A");
        } else if ((letterGrade >= 80) & (letterGrade <= 89)) {
            System.out.println("The letter grade is B");
        } else if ((letterGrade >= 70) & (letterGrade <= 79)) {
            System.out.println("The letter grade is C");
        } else if ((letterGrade >= 60) & (letterGrade <= 69)) {
            System.out.println("The letter grade is D");
        } else if ((letterGrade >= 0) & (letterGrade <= 59)) {
            System.out.println("The letter grade is F");
        } else {
            System.out.println("Invalid input, try again.");
        }
    }

    String firstChar = "e";
    String secondChar = "E";

    {
        if ((firstChar == secondChar)) {
            System.out.println("Thank you for using the grading system");
        } else {
            System.out.println("Thank you for using the grading system");
        }

        {

        }

    }

    {

    }
}
}

我错过了什么?我已经在这两个星期了?

1 个答案:

答案 0 :(得分:1)

主要问题是将每个输入都作为int而不检查int是否因为&#34; e&#34;可以输入。 如果您希望用户输入"E" or "e",您应首先检查用户输入值是否为数字。您可以使用try{catch},但最好使用regex。并在您的代码中比较不正确的字符串。您可以使用||检查用户输入e或E,但.tolowercase或equalsIgnoreCase很简单

public class NewClass {

public static void main(String[] args) {

    String firstChar = "e";
    String secondChar = "E";
    boolean prompt = true;
    while (prompt) {
        //Prompt the student to input their data
        System.out.print("Please enter your exam score, or press E to exit :");

        @SuppressWarnings("resource")
        Scanner keyboard = new Scanner(System.in);
        String userinput = keyboard.next();
        if(isNumeric(userinput)){
            int letterGrade=Integer.parseInt(userinput);
            if ((letterGrade >= 90) & (letterGrade <= 100)) {
                System.out.println("The letter grade is A");
            } else if ((letterGrade >= 80) & (letterGrade <= 89)) {
                System.out.println("The letter grade is B");
            } else if ((letterGrade >= 70) & (letterGrade <= 79)) {
                System.out.println("The letter grade is C");
            } else if ((letterGrade >= 60) & (letterGrade <= 69)) {
                System.out.println("The letter grade is D");
            } else if ((letterGrade >= 0) & (letterGrade <= 59)) {
                System.out.println("The letter grade is F");
            } else {
                System.out.println("Invalid input, try again.");
            }
        }else if(userinput.equalsIgnoreCase(firstChar)){
             System.out.println("Thank you for using the grading system");
             System.exit(0);
        }
    }

}

    public static boolean isNumeric(String str) {
      return str.matches("-?\\d+(\\.\\d+)?"); 
    }
}

如果您不允许使用方法equalsignorecase,则可以使用or运算符

else if(userinput.equals(firstChar)||userinput.equals(secondChar)){
      System.out.println("Thank you for using the grading system");
      System.exit(0);
}

并且如果您不允许使用regex .replace isNumeric方法,请执行以下操作 尝试捕捉逻辑

public static boolean isNumeric(String str)  
{  
  try  
  {  
    double d = Double.parseDouble(str);  
  }  
  catch(NumberFormatException ex)  
  {  
    return false;  
  }  
  return true;  
}