2015-10-14 55 views
0

我有一個簡單的程序來計算工資率。我知道應該使用簡單的while語句,但不確定我如何最好地實現它。基本上,我可以反覆詢問薪資率,直到收到一個整數。如何檢查輸入是一個整數並重復,直到收到有效的輸入爲止

例如,如果用戶輸入「cat」,系統應該顯示一條警告消息並繼續打印該消息,直到收到一個整數。

我有什麼:

System.out.println("Please enter your hourly pay rate"); 
    if(user_input.hasNextInt()){ 
     payment = user_input.nextInt(); 
     System.out.println("Your hourly pay rate is " + payment + " dollars p/h"); 
    } 
    else{ 
     System.out.println("Please enter a valid input"); 
    } 
+1

爲什麼'while(!user_input.hasNextInt())'不可接受? –

回答

0

使用do-while循環與無限循環。一旦找到int值,打破循環。使用try-catch來處理其他輸入的異常拋出。

do { 
     System.out.println("Please enter your hourly pay rate"); 
     String str = user_input.nextLine(); 
     try { 
     payment = Integer.parseInt(str.trim()); 
     if (payment <= 0) { 
      System.out.println("Please enter a valid input"); 
      continue; 
     } 
     System.out.println("Your hourly pay rate is " + payment + " dollars p/h"); 
     break; 
     } 
     catch (NumberFormatException e) { 
     System.out.println("Please enter a valid input"); 
     } 
    } while (true); 

輸出:

Please enter your hourly pay rate 
string 
Please enter a valid input 
Please enter your hourly pay rate 
123 
Your hourly pay rate is 123 dollars p/h 

Online Demo

+0

我試過這個,但它去了無限循環 – Saravana

+0

我不這麼認爲。你能提供,你是如何運行的。 – YoungHobbit

+0

爲我工作,想知道這是否會爲一個負整數或0? – shellpottassium

0

由於@Luke園提到你根本就

while(!user_input.hasNextInt()){ 
    System.out.println("Please enter a valid input"); 
} 
payment = user_input.nextInt(); 
System.out.println("Your hourly pay rate is " + payment + " dollars p/h"); 
+0

你測試了嗎?對於任何一個錯誤的輸入,它都會進入無限循環。 – YoungHobbit

+0

是的,它在這一個去了一個無限循環... – shellpottassium

0

我這樣做

boolean gotIn = false; 
    while (!gotIn) { 
     try { 
      System.out.print("Enter number "); 
      Scanner scan = new Scanner(System.in); 
      System.out.println(scan.nextInt()); 
      scan.close(); 
      gotIn = true; 
     } catch (RuntimeException nfe) { 
      System.err.println("Invalid input, Enter only numbers "); 
     } 
    } 

但是創建每一次新的掃描儀,@YoungHobbit的解決方案是正確的。

相關問題