2017-02-17 91 views
0

我遇到了Scanner問題,因爲它似乎正在接受輸入值類型,並強制下次用戶輸入的值爲相同類型。我無法找到任何原因,爲什麼這段代碼不工作,並給我一個InputMismatchException,因爲我寫了這樣的代碼一百萬次,沒有問題。找不到InputMismatchException的原因

public void register(){ 
    Scanner input=new Scanner(System.in); 
     System.out.println("What course would you like to register for?"); 
     String course_name = input.next(); 
     System.out.println("What section?"); 
     int section = input.nextInt(); 

     for (int i = 0; i < courses.size(); i++) { 
      if (courses.get(i).getCourse_name().equals(course_name)) { 
       if (courses.get(i).getCourse_section() == section) { 
        courses.get(i).AddStudent(this.first_name+" "+this.last_name); 
       } 
      } 
     } 
     input.close(); 
    } 

此問題是不只是爲寄存器()方法,但計劃範圍,例如具有這樣的代碼:

public void Options() { 
    Scanner input=new Scanner(System.in); 
    while (true) { 
     System.out.println("What would you like to do (Enter corresponding number):" + "\n" + "1) View all courses" + "\n" + "2) View all courses that are not full" + "\n" + "3) Register on a course" + "\n" + "4) Withdraw from a course" + "\n" + "5) View all courses that the current student is being registered in" + "\n" + "6) Exit"); 
     int user = input.nextInt(); 
     if (user == 1) 
      viewAll(); 
     if (user == 2) 
      viewAllOpen(); 
     if (user == 3) 
      register(); 
     if (user == 4) 
      withdraw(); 
     if (user == 5) 
      viewRegistered(); 
     if (user == 6) { 
      Serialize(); 
      break; 
     } 
    } 

如果的方法中,如寄存器中的一個需要用戶輸入一個String,int user = input.nextInt();將導致InputMismatchException。

+1

檢查http://stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after-using-next-nextint-or-other-nextfoo – TheLostMind

回答

0

我已經轉載了這段代碼,並沒有遇到同樣的問題。如果用戶在提示輸入課程編號時輸入一個整數(如11),則代碼將正常運行。當然,如果你輸入的不是整數,它會拋出一個InputMismatchException。掃描程序#nextInt()的Java文檔描述,具體如下:

將輸入的下一個標記掃描爲int。

形式nextInt的這種方法(的調用)的行爲以完全相同的方式調用nextInt(基數),其中基數是此掃描器的默認基數。

拋出:

InputMismatchException - 如果下一個標記不匹配Integer正則表達式,或者超出範圍

Read More

如果要避免這種情況,不想爲了處理try-catch,你可以暫停執行直到給出一個有效的整數。

public static void register(){ 
    Scanner input=new Scanner(System.in); 
    System.out.println("What course would you like to register for?"); 
    String course_name = input.next(); 
    System.out.println("What section?"); 
    //Loop until the next value is a valid integer. 
    while(!input.hasNextInt()){ 
     input.next(); 
     System.out.println("Invalid class number! Please enter an Integer."); 
    } 
    int section = input.nextInt(); 
    input.close(); 

    System.out.println(course_name + " " + section); 
} 
+0

這不是沒有輸入整數的問題。當我運行它,我甚至不獲得爲InputMismatchException時後我輸入我想爲註冊課程的名稱出現,然後程序停止,進入一個整數的機會。 – UnionSquareBanter

+0

儘快在您掃描所請求的字符串後,在Options方法中關閉掃描儀。該資源仍處於打開狀態的事實。我對掃描儀的註冊方法被打開干擾。如果這不起作用,然後粘貼你的堆棧跟蹤。 '掃描儀輸入=新掃描儀(System.in); 而(真){ 的System.out.println( 「等等」); int user = input.nextInt(); input.close() //其他代碼here.' –