有關于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("請輸入運載人數:"); int?num1?=?input.nextInt(); System.out.print("請輸入運載方式:"); String?way1?=?input.next(); System.out.println("巴士在"+way1+"運輸"+num1+"人"); } }
我在課后練習中嘗試使用Scanner輸入數據來獲取不同交通工具的運輸方式和運輸人數,然后發現在輸入字符串的過程中
如果使用
System.out.print("請輸入運載方式:"); String?way1?=?input.nextLine();
就會跳過運載方式的輸入,結果如下:
請輸入運載人數:40 請輸入運載方式:巴士在運輸40人
如果使用
System.out.print("請輸入運載方式:"); String?way1?=?input.next();
才會正確的得到我想要的結果:
請輸入運載人數:40 請輸入運載方式:陸地上 巴士在陸地上運輸40人
請問這是為什么?
2017-03-05
next()一定要讀取到有效字符后才可以結束輸入,對輸入有效字符之前遇到的空格鍵、Tab鍵或Enter鍵等結束符,next()方法會自動將其去掉,只有在輸入有效字符之后,next()方法才將其后輸入的空格鍵、Tab鍵或Enter鍵等視為分隔符或結束符。簡單地說,next()查找并返回來自此掃描器的下一個完整標記。完整標記的前后是與分隔模式匹配的輸入信息,所以next方法不能得到帶空格的字符串
而nextLine()方法的結束符只是Enter鍵,即nextLine()方法返回的是Enter鍵之前的所有字符,它是可以得到帶空格的字符串的。
意思就是說,nextInt()讀到有效值后就結束,輸完數字后按的回車符還存在,nextLine()讀取到回車符就直接結束,所以結果就類似于跳過了該條輸入語句
2017-03-05
nextLine???與nextInt不能同時使用
假設你第一次輸入一個:40 空格 陸地上,回車
那么nextInt讀到的便是40此時并沒有換行,你在way1那里用nextLine讀到的便是 空格陸地上 的值,
此時你輸入的那一行信息才讀完,下一個nextline才會讓你重新輸入值