这有一个nextLine()的问题:
为什么我还没有来得及输入一个字符串,程序就结束了?
是因为:
我输入完110之后,又继续输入了一个换行符。此时,nextInt()他只会把110扫描读取到,此时光标位置在110后面;nextLine()他会从光标位置 开始扫描直到换行符(包含换行符),因此nextLine()他扫描了一个换行符作为输入。因此,我们还没来得及从键盘输入字符串程序就已经结束了。因此打印的内容是空空的。
nextInt()、next()和nextLine()区别
-
nextInt():
遇见第一个有效字符(非空格,非换行符)时,开始扫描读取,nextInt()只读取数值。当遇见第一个 空格 或 换行符时,结束扫描。
扫描结束标志是:遇到空格符 或者 换行符就停止扫描,不扫描空格或换行符。
扫描结束后,光标在读取的最后一个数字后面,光标在本行中。 -
next():
next() 方法遇见第一个有效字符(非空格,非换行符)时,开始扫描,当遇见第一个 空格 或 换行符时,结束扫描。获取扫描到的内容是第一个扫描到的不含空格、换行符的单个字符串。
扫描结束标志是:遇到空格符 或者 换行符。
扫描结束后,光标在读取的最后一个字符后面,光标在本行中。 -
nextLine():
nextLine() 是扫描读取一行内容 作为一个字符串。
结束的标志:扫描完整行内容(包括空格 或者 换行符)。
扫描结束后,光标移动到下一行。
解决办法:
可以在nextInt() 和 nextLine()之间 再添加一个nextLine()用来吸收掉空格 或 回车;
Scanenr的使用:
public static void test1(){
//创建一个Scanner键盘录入对象
Scanner scanner = new Scanner(System.in);
if(scanner.hasNextInt()){ //判断当前是否还有键盘输入
if(scanner.hasNextInt()){ //判断当前的输入是否是整数格式,若是整数,则为true。执行代码块
int i = scanner.nextInt(); //扫描得到键盘输入的数字数据。
System.out.println(i);
System.out.println("******");
}
}
}
注意
- 一般,hasNextInt() 判断有没有键盘的输入。
- hasNextInt() :判断从键盘输入的数据是否为int格式,若是int格式,则返回true。否则,返回false。
- hasNext() :判断从键盘输入的数据是否为字符。//总是返回true。