2012-11-06 58 views
0

我有以下代碼:嘗試Catch保持循環而不是要求另一個值?

Scanner inputSide = new Scanner(System.in); 

double side[] = new double[3]; 
int i = 0; 
do{ 
    try{ 
    System.out.println("Enter three side lengths for a triangle (each followed by pressing enter):"); 
    side[i] = inputSide.nextDouble(); 
    i++; 
    } 
    catch(Exception wrongType){ 
     System.err.println(wrongType); 
     System.out.println("Please enter a number. Start again!!"); 
     i=0; 
    } 
} 
while(i<3); 

它工作正常,並做什麼它的意思是,如果我不輸入了錯誤的數據類型,但如果我進入其他的東西比雙然後循環一遍又一遍,在try和catch塊中打印所有內容,而不是等待我輸入另一個double。

任何幫助,爲什麼它這樣做 - 因爲我似乎無法理解爲什麼 - 將不勝感激。

謝謝:)

回答

2

的問題是,你已經使用input.nextDouble方法,其內容在僅輸入下一個標記,從而跳過newline末。請參閱Scanner.nextDouble

現在,如果您第一次輸入錯誤值,那麼它會將newline視爲下一個輸入。這也將是無效的。

您可以在catch塊中添加一個空的input.nextLine

catch(Exception wrongType){ 
    System.err.println(wrongType); 
    System.out.println("Please enter a number. Start again!!"); 
    i=0; 
    input.nextLine(); // So that it consumes the newline left over 
} 

現在,您nextLine()會讀遺留linefeed,和換行不會被視爲輸入您nextDouble下一次。在這種情況下,甚至在您提供任何輸入之前,它都會失敗。

+0

只有當它到達catch塊時纔會發生。我需要它將其設置爲0,如果它到達catch塊,但我問的是爲什麼一旦輸入無效值而不是等待用戶輸入另一個值時,它會一直循環。謝謝你的迴應:) –

+0

謝謝,但那不是我要問的。它不會停止讓用戶輸入另一個值。 –

+0

真棒 - 謝謝!我沒有想到:)感謝您的幫助:) –