有關(guān)于input.next()和input.nextLine()的問題
package?com.imooc; import?java.util.Scanner; public?class?Bus?extends?Traffic?{ Scanner?input?=?new?Scanner(System.in); public?void?method(){ System.out.print("請(qǐng)輸入運(yùn)載人數(shù):"); int?num1?=?input.nextInt(); System.out.print("請(qǐng)輸入運(yùn)載方式:"); String?way1?=?input.next(); System.out.println("巴士在"+way1+"運(yùn)輸"+num1+"人"); } }
我在課后練習(xí)中嘗試使用Scanner輸入數(shù)據(jù)來(lái)獲取不同交通工具的運(yùn)輸方式和運(yùn)輸人數(shù),然后發(fā)現(xiàn)在輸入字符串的過程中
如果使用
System.out.print("請(qǐng)輸入運(yùn)載方式:"); String?way1?=?input.nextLine();
就會(huì)跳過運(yùn)載方式的輸入,結(jié)果如下:
請(qǐng)輸入運(yùn)載人數(shù):40 請(qǐng)輸入運(yùn)載方式:巴士在運(yùn)輸40人
如果使用
System.out.print("請(qǐng)輸入運(yùn)載方式:"); String?way1?=?input.next();
才會(huì)正確的得到我想要的結(jié)果:
請(qǐng)輸入運(yùn)載人數(shù):40 請(qǐng)輸入運(yùn)載方式:陸地上 巴士在陸地上運(yùn)輸40人
請(qǐng)問這是為什么?
2017-03-05
next()一定要讀取到有效字符后才可以結(jié)束輸入,對(duì)輸入有效字符之前遇到的空格鍵、Tab鍵或Enter鍵等結(jié)束符,next()方法會(huì)自動(dòng)將其去掉,只有在輸入有效字符之后,next()方法才將其后輸入的空格鍵、Tab鍵或Enter鍵等視為分隔符或結(jié)束符。簡(jiǎn)單地說,next()查找并返回來(lái)自此掃描器的下一個(gè)完整標(biāo)記。完整標(biāo)記的前后是與分隔模式匹配的輸入信息,所以next方法不能得到帶空格的字符串
而nextLine()方法的結(jié)束符只是Enter鍵,即nextLine()方法返回的是Enter鍵之前的所有字符,它是可以得到帶空格的字符串的。
意思就是說,nextInt()讀到有效值后就結(jié)束,輸完數(shù)字后按的回車符還存在,nextLine()讀取到回車符就直接結(jié)束,所以結(jié)果就類似于跳過了該條輸入語(yǔ)句
2017-03-05
nextLine???與nextInt不能同時(shí)使用
假設(shè)你第一次輸入一個(gè):40 空格 陸地上,回車
那么nextInt讀到的便是40此時(shí)并沒有換行,你在way1那里用nextLine讀到的便是 空格陸地上 的值,
此時(shí)你輸入的那一行信息才讀完,下一個(gè)nextline才會(huì)讓你重新輸入值