1. 程式人生 > >java Scanner類中nextLine()方法與nextInt()等聯用時

java Scanner類中nextLine()方法與nextInt()等聯用時

先看一個簡單的例子:

import java.util.Scanner;
public class ClassTest{
	public static void main(String[] args){
		Scanner input=new Scanner(System.in);
		System.out.println("in:");
		int a=input.nextInt();
		System.out.println("in:");
		String i=input.nextLine();
		System.out.println("in:");
		String j=input.nextLine();
		System.out.println("a is"+a+"i is"+i+"j is"+j);
	}
}


這是執行的結果,還不待我們輸入第二個引數就直接跳轉到第三條輸入語句,nextLine()方法與next()或nextInt()聯用時可能出現一個常見的錯誤,那就是當next()或者nextInt(),nextDouble()  、 nextFloat()用在nextLine的前面時。nextLine會把前者的結束符“換行符”作為字串讀入,進而不需要從鍵盤輸入字串nextLine已經轉向下一條語句執行

解決方案:

在每一個next()、nextInt()、nextDouble()等後加一條nextLine()語句,將被next()去掉的Enter過濾掉,程式碼如下:

import java.util.Scanner;
public class ClassTest{
	public static void main(String[] args){
		Scanner input=new Scanner(System.in);
		System.out.println("in:");
		int a=input.nextInt();
		input.nextLine();
		System.out.println("in:");
		String i=input.nextLine();
		System.out.println("in:");
		String j=input.nextLine();
		System.out.println("a is "+a+"i is "+i+"j is "+j);
	}
}

修改後執行結果:


原因:

next()一定要讀取到有效字元後才可以結束輸入,對輸入有效字元之前遇到的空格鍵、Tab鍵或Enter鍵等結束符,next()方法會自動將其去掉,只有在輸入有效字元之後,next()方法才將其後輸入的空格鍵、Tab鍵或Enter鍵等視為分隔符或結束符。簡單地說,next()查詢並返回來自此掃描器的下一個完整標記。完整標記的前後是與分隔模式匹配的輸入資訊,所以next方法不能得到帶空格的字串。 而nextLine()方法的結束符只是Enter鍵,即nextLine()方法返回的是Enter鍵之前的所有字元,它是可以得到帶空格的字串的。