2015-09-06 169 views
1
(bank is a static int variable declared up top) 
    boolean valid = true; 
    Scanner scan = new Scanner(System.in); 


    while (valid) { 
     try { 
     System.out.println("How much money do you want to convert to chips?"); 
     bank = scan.nextInt(); 
     valid = false; 
     } catch(InputMismatchException ex) { 
      System.out.println("Thats not right try entering a number between 0 and 2,147,483,647"); 
      //bank = scan.nextInt(); 
      continue; 
     } 

    } 

如果我取消註釋第二個銀行= scan.nextInt();我得到相同的InputMismatchError,但我沒有另一個嘗試捕獲,所以它打印出stacktrace。 我該如何改變這個循環來接受最後一個新的輸入?掃描儀InputMismatchException while循環問題

回答

1

試試這個代碼:

static int bank = 0; 

public static void main(String[] args) { 
    boolean valid = true; 
    Scanner scan = new Scanner(System.in); 

    do { 
     System.out.println("How much money do you want to convert to chips?"); 
     if(scan.hasNextInt()){ 
      bank = scan.nextInt(); 
      valid = true; 
     }else{ 
      scan.nextLine(); 
      valid = false; 
      System.out.println("Enter a valid integer value"); 
     } 
    }while(!valid); 
} 

希望它能幫助。

1

你可能已經進入了一個非整數字符(S),因此需要消耗

} catch (InputMismatchException ex) { 
    System.out.println("Invalid input: " + scan.nextLine()); 
} 
0

可以在catch塊添加另一個try/catch但我相信,是不是你想什麼去做。如果你真的想這樣做,你應該閱讀關於狀態機模式https://en.wikipedia.org/wiki/State_pattern#Java。在這種方法中,您可以在循環中掃描輸入,但取決於狀態,反應不同。