2011-12-09 22 views
2

在我的Java程序的一部分中,我爲用戶讀取一系列輸入。(Java)nextLine()在運行時跳過,而以前工作

Scanner in = new Scanner(System.in); 
System.out.println(); 
System.out.print("Enter student name: "); 
String nameParameter = in.nextLine(); 
System.out.print("Enter student number: "); 
int studentNoParameter = in.nextInt(); 
System.out.print("Enter subject: "); 
String subjectParameter = in.nextLine(); 
System.out.print("Enter level: "); 
int levelParameter = in.nextInt(); 
int[] resultsParameter; 
resultsParameter = new int[3]; 
System.out.println("Enter results (0 if not taken yet)..."); 
System.out.print("First year: "); 
resultsParameter[0] = in.nextInt(); 
System.out.print("Second year: "); 
resultsParameter[1] = in.nextInt(); 
System.out.print("Third year: "); 
resultsParameter[2] = in.nextInt(); 
System.out.println(); 

程序編譯,但該行:

String subjectParameter = in.nextLine(); 

後迅速進入主題,在運行時似乎跳過。

而不是我的輸出中的:

進入主題:[用戶輸入]

輸入電平:[用戶輸入]

它出來爲:

進入主題:輸入電平:[用戶輸入]

將以下輸入分配給levelParameter,並且如果輸入的不是整數,則會出現錯誤,因此它似乎代碼行已經被跳過了。

我是一個java新手,我很困惑。儘管如此,我知道這最終會變得非常簡單而愚蠢。預先感謝您的時間。

回答

3

這是因爲在讀取int之後,其餘行(它是空的)仍然未讀,下一次讀取nextline()的調用將讀取空行。

所以當執行

int studentNoParameter = in.nextInt(); 

,您輸入的int和你打輸入,它創建了一個 '\ n' 作爲輸入。 下一次調用:

in.nextLine(); 

繼續讀取INT後的線,這是空的剩餘部分,並且它遇到「\ n」和終止。

+0

哦!我懂了。我沒有意識到nextInt和nextLine就是這樣工作的。謝謝。 – HellaWiggly

+1

歡迎:)只需使用一個nextline()即可獲得空行程 – lynnyilu

+2

@ user1089092如果答案令人滿意,這是一個接受答案的好姿態。這給答案者更好的聲譽,並且還會提高你未來獲得答案的機會。 –