java中使用nextLine(); 沒有輸入就自動跳過的問題?


【問題分析】

必要的知識:in.nextLine();不能放在in.nextInt();代碼段后面
否則in.nextLine();會讀入"\n"字符,但"\n"並不會成為返回的字符


因為nextInt();接收一個整型字符,不會讀取\n,nextline();讀入一行文本,會讀入"\n"字符,但"\n"並不會成為返回的字符


那么問題就在於for循環中的三個輸入等待中,前兩個是字符串(學校名稱、校長姓名)最后一個是整型(建校時間),
在第一次循環時並沒有什么問題,但當循環進入第二次時,第一次循環輸入的班級數目(假設為2),我們輸入的是"2\n",
nextInt();掃描了2這個值並返回(沒有讀取"\n"字符),而第二次循環一開始的nextLine();接收了上一個循環最后輸入的"\n"字符,
然而"\n"並不會成為返回字符,所以看起來有一種“跳過”的假象。

【解決方案】

接下來我們來看看解決方案


方案1:(不推薦)

將Scanner in = new Scanner(System.in);放入循環體,因為只循環一次的話並不存在問題,所以可以解決“跳過”的問題。


方案2:

 

解決在nextInt();后的nextLine();會接收"\n"的問題,可以在他們中間加一個in.nextLine();語句來接收這個"\n"。


方案3:(可接收含空格的字符串,后文有說)

必要的知識:
next();這個函數會掃描從有效字符起到空格,Tab,回車等結束字符之間的內容並作為String返回。
nextLine();這個函數在你輸入完一些東西之后按下回車則視為輸入結束,輸入的內容將被作為String返回。
next();這個函數與之不同在於,next();什么都不輸入直接敲回車不會返回,而nextLine()即使不輸入東西直接敲回車也會返回。
再舉個例子,輸入"   abc def gh\n",next();會返回abc,而nextLine();會返回   abc def gh\n,我們看到的是   abc def gh
//附上代碼

import java.util.*;
public class testScanner{
public static void main(String[]args){
Scanner in = new Scanner(System.in);
String str = in.nextLine();
//String str = in.next();可自行將上一行代碼更換為此行代碼嘗試
System.out.println(str);
}
}


所以把代碼中的nextLine();換成next();便可以解決“跳過”問題。(因為next();不把上個循環的最后一個"\n"看成有效字符)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM