2011-04-16 65 views
0

我想要做的是如果用戶點擊輸入鍵,程序應該拋出一個BadUserInputException。 我的問題是每當我按下回車鍵,它只是把我放在控制檯的另一行本質上什麼都不做。來自掃描儀的空白輸入 - java

Scanner input = new Scanner(System.in); 
    System.out.println("Enter Student ID:"); 

    String sID = null; 
    if (input.hasNextInt()==false){ 
     System.out.println("Please re-check the student number inputted. Student number can only be digits."); 
     throw new BadUserInputException("Student number can not contain non-digits."); 
    }else if (input.next()==""){ 
     throw new BadUserInputException("Student number can not be empty"); 
    } 
+0

掃描儀的next()是一個塊等待方法,它阻塞,直到你得到一些輸入,所以你永遠不會進入第二個if語句,在這種情況下,你可能需要使用一些流輸入類,它比Scanner更健壯。 – Rn2dy 2011-04-16 20:48:12

回答

1

您需要用.equals方法,不==比較字符串。

+3

我仍然得到同樣的東西。當我按下輸入鍵時,只需要一行,就可以輸入一些內容。 – 2011-04-16 20:42:53

2

掃描程序在空格和換行符之間查找標記 - 但沒有任何標記。我不傾向於使用Scanner從標準輸入讀 - 我用的是老式的BufferedReader方法是這樣的:

BufferedReader buf = new BufferedReader (new InputStreamReader (System.in)); 

,然後我可以說

String line = buf.readLine(); 
if (line.equals ("")) blah(); 

可能有一個簡單的解決方案然而。

5

我遇到了這個確切的問題,我相信我想出了一個解決方案。

關鍵是接受輸入爲String類型,並使用.isEmpty()方法檢查用戶是否輸入了任何內容。

如果字符串被命名爲「奶酪」和掃描儀被命名爲「中」,這裏是這個樣子:

cheese = ""; // empty 'cheese' of prior input 
cheese = in.nextLine(); //read in a line of input 

//if user didn't enter anything (or just spacebar and return) 
if(cheese.isEmpty()) { 
System.out.println("Nothing was entered. Please try again"); 
} 
//user entered something 
else { 
[enter code here checking validity of input] 
} 

我想執行這一檢查整數輸入,並發現這是更好地接受字符串類型輸入並使用包裝類將其轉換爲int類型。如果你有

int eger = 0; //initialize to zero 

,那麼你會把這段代碼在else上述聲明:

else{ 
eger = Integer.valueOf(cheese); 
} 

我知道這個問題是2年前問過,但我張貼這在幫助他人的希望像我一樣在尋找答案。 :)

0

只需使用nextLine()方法而不是next()掃描字符串,最後使用isEmpty()方法檢查字符串。這爲我工作..