2012-11-29 84 views
1

程序應該詢問用戶一個數字,並循環直到輸入不是數字(如果有數字輸入則重複)。 到目前爲止我的代碼:在沒有輸入或非數字輸入時的用戶輸入中斷

import java.util.*; 

public class MataVarden 
{ 
    public static void main(String[] args) throws Exception 
    { 
     Scanner sc = new Scanner(System.in);  
     ArrayList<Integer> Values = new ArrayList<Integer>(); 

     System.out.print("Input a number: "); 
     Values.add(sc.nextInt()); 

     Collections.sort(Values); 
     System.out.println("Values sorted: " + Values); 
    } 
} 

你需要什麼,如果是進入了一個非數字,以打破輸入呢?

+0

您可能想要考慮在用戶沒有輸入數字(或「ABC」)時,sc.nextInt()會執行什麼操作。您可能還想看看掃描儀API,http://docs.oracle.com/javase/6/docs/api/java/util/Scanner.html。 – rajah9

回答

1

對這些情況使用while循環。

System.out.println("Input a number"); 
String line = ""; 
while (sc.hasNextLine() && !(line = sc.nextLine()).equals("")) { 
    try { 
     int val = Integer.parseInt(line); 
     values.add(val); 
    } catch (NumberFormatException e) { 
     break; 
    } 

    System.out.println("Input a number"); 
} 

現在好了,這裏是正在發生的事情有一個解釋: -

  • sc.hasNextLine()檢查是否有讀或不輸入。如果是,則繼續進行下一個測試
  • !(line = sc.nextLine()).equals("")檢查下一個輸入是否爲empty string。如果它是空字符串,則條件失敗,循環結束。
  • 由於我們正在閱讀使用nextLine()方法的輸入,我們必須分析它使用Integer.parseInt(line);
  • 我們需要把它們放在一個try-catch塊來處理像​​輸入,不會被解析到一個整數到整數,並會拋出異常,在這種情況下,我們從catch block中跳出while loop
  • 請注意,我沒有使用sc.nextInt(),因爲它沒有從輸入中讀取換行符。所以,沒有辦法知道何時終止循環。

作爲一個側面說明,你應該始終遵循在你的代碼編碼約定。你的變量名應該以小寫字母開頭。

+2

這不會像指定的那樣工作,因爲當輸入非數字或空值時它不會跳出循環。 – ddmps

+0

@Pescis。那麼,它將適用於非數字。對於輸入,是的,我將編輯代碼。 –

+1

雖然這是好的,但我認爲如果在課程中提出問題,則應該更負責地瞭解發生了什麼以及如何解決問題,而不僅僅是給出這樣的答案。 – ThePerson

相關問題