2014-09-30 61 views
-3

我得到了一個簡單的任務來完成,建立一個分級標準,這將使學生對所提交值的字母等級。除了學生完成之後,一切似乎都能順利運行 - 他們需要輸入「E」才能退出程序......這是我丟失的地方,因爲我收到了這個異常"Exception in thread "main" java.util.InputMismatchException"。我知道結局是小東西,我很想念,但我不能弄明白這裏是我目前擁有的代碼:爲什麼我得到錯誤「異常線程‘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"); 
     } 

     { 

     } 

    } 

    { 

    } 
} 
} 

我在想什麼?我已經呆了兩週了?

+2

「E」 不是一個'int'。 – 2014-09-30 01:00:41

+0

當我不使用[int]時,我怎樣才能收到字母等級並退出帶有「E」的程序?字母等級與輸入值不匹配。 – 2014-09-30 01:05:36

+0

也'firstChar == secondChar'不會做你認爲它... – John3136 2014-09-30 01:10:40

回答

1

主要問題是採取一切輸入爲INT沒有int或不檢查,因爲「E」是可能的輸入。 如果你想用戶輸入"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; 
} 
+0

學會使用不會發生'.equalsIgnoreCase()'是更有效和測試平等不區分大小寫的慣用方式!它也正確使用'i18n'! – 2014-09-30 01:27:46

+0

@JarrodRoberson OK。我改變tolowercase到equalsIgnoreCase – 2014-09-30 01:31:30

+0

@JarrodRoberson主要問題是採取一切輸入爲INT不檢查int或不是因爲「E」可以input.this是正確的做法對於這個疑難問題了解equalsIgnoreCase絕對有效在這個案件。 – 2014-09-30 01:56:17

相關問題