2013-10-22 17 views
1

我正在寫一個腳本,用戶只能輸入正整數。我用try catch和while循環來使用掃描器。該循環將不斷要求用戶輸入正確的信息。只接受正整數使用try catch,而

我可以檢查負整數,但字符串或其他瘋狂的東西呢?

int price = 0; 
    Scanner input = new Scanner(System.in); 
    try { 
     System.out.println("Enter max price: "); 
     price = input.nextInt(); 
     if (price > 0) { 
      input.close(); 
     } else { 
      while (price < 0) { 
       System.out.println("Negative values not allowed"); 
       System.out.println("Enter max price: "); 
       price = input.nextInt(); 
      } 
      input.close(); 
     } 
    } catch (InputMismatchException e1) { 

    } 

我有種陷在catch部分..

+1

用'nextLine()'讀整行並使用'Integer.parseInt()'嘗試解析一個'int'。 –

+0

另外,如果您計劃稍後閱讀輸入內容,則不需要關閉該掃描儀。就像一個人站起來一樣。 –

+1

如果你**有**使用'try-catch'構造,那麼你將捕獲['nextInt']拋出的異常(http://docs.oracle.com/javase/7/docs/api/java /util/Scanner.html#nextInt())並生成錯誤消息並繼續執行,但整個'try-catch塊'應該在'while'內。 –

回答

2

調用input.hasNextInt()檢查,如果下一個標記實際上是一個整數。 Scanner有很多有用的方法,所以我建議taking a look at the docs

+0

如果你這樣做,並且想要檢查它在同一行中是否爲正數,那麼確保你在後面檢查後確保它是一個int:'if(input.hasNextInt ()&& input.parseInt()> 0)'不是相反。但是......無論如何,你應該可以在兩條單獨的線上做到這一點。 – BlackVegetable