scanner類中函式nextline()沒有輸入自動跳過的問題
阿新 • • 發佈:2020-12-03
目錄
import java.util.Scanner; public class InputTest04 { public static void main(String[] args) { // 接收多種型別的輸入資料 Scanner sco = new Scanner(System.in); System.out.println("your name"); String name = sco.nextLine();// 接收一行字串 System.out.println("your age"); int age = sco.nextInt();// 接收一行數字 System.out.println("your salary"); float sal = sco.nextFloat();// 接收一行數字 System.out.println("your gender"); String gender = sco.nextLine();// 接收一行字串,注意和nextLine的區別是從第一個非特殊字元 System.out.println( "name is " + name + ";\tage is " + age + ";\tsalary is " + sal + ";\tgender is " + gender + ";"); // 關閉流 sco.close(); } }
問題:在第四個變數gender性別的位置,沒有輸入值就自動跳過了?
解決思路:
1、檢查程式碼正確性;確認沒錯誤;
2、懷疑位置放置不合適;嘗試放在第三個變數salary前面,依然跳過;放在第二個age前面,不會出錯;
3、懷疑是接收的資料型別由字串到數值再到字串導致跳過;
4、查閱資料;
原因:
- in.nextLine();不能放在in.nextInt()程式碼段後面;因為in.nextLine()會讀入"\n"字元,但"\n"並不會成為返回的字元,而nextInt()是不會讀入“\n”的;
- 什麼是“\n”,特殊字元-轉行
- 因為nextInt()接收一個整型字元,不會讀取\n;而nextline()讀入一行文字,會讀入"\n"字元,但"\n"並不會成為返回的字元
解決:把程式碼中的nextLine();換成next();便可以解決“跳過”問題。
- next();這個函式會掃描從有效字元起到空格,Tab,回車等結束字元之間的內容並作為String返回。
- nextLine();這個函式在你輸入完一些東西之後按下回車則視為輸入結束,輸入的內容將被作為String返回。
- next();這個函式與之不同在於next();什麼都不輸入直接敲回車不會返回,而nextLine()即使不輸入東西直接敲回車也會返回。
舉個例子,輸入" abc def gh\n",next();會返回abc,而nextLine();會返回 abc def gh\n,我們看到的是 abc def gh
程式碼:
System.out.println("your gender");
String gender = sco.nextLine();// 接收一行字串,注意和nextLine的區別是從第一個非特殊字元