1. 程式人生 > 實用技巧 >scanner類中函式nextline()沒有輸入自動跳過的問題

scanner類中函式nextline()沒有輸入自動跳過的問題

目錄

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的區別是從第一個非特殊字元

詳細分析:https://www.cnblogs.com/1020182600HENG/p/6564795.html