1. 基础代码 + 输出结果
public class TestScanner {
public static void main(String[] args) {
// 创建scanner扫描对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数字:");
int num = scanner.nextInt();
System.out.println("num = "+num);
}
}
2. 利用while循环测试代码,发现并不用重新new Scanner 也能够重新复制给int类型的变量
public class TestScanner {
public static void main(String[] args) {
// 创建scanner扫描对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
// 判断while循环出来的变量
boolean flag = true;
while (flag){
System.out.println("请输入一个数字:");
int num = scanner.nextInt();
System.out.println("num = "+num);
}
}
}
3. 最后测试一下nextLine()获取字符串类型
只更改了如下代码
依然可以
但是我接下来的操作就开始出现神奇的地方了
我在后面再加入一个nextInt,String类型的字符串在循环中第二次被跳过了,变成了空字符。
4. 将原本注释的nextInt()部分代码移到nextLine()下面
再次测试 神奇的地方出现了! 这行被直接跳过了,并没有执行。
原因:
nextLine()函数获取的是一整行的内容并且其中也包括了(\n)也就是换行符
(注意!这里的换行符指的是你自己手动输入enter结束的那个换行符)
而nextInt()函数获取的仅仅是一个值不包含(\n),
那么nextInt()后面的nextLine()读取一行,就把之前nextInt()灭有读取的(\n)读进去了,意思就是nextLine()的值是(\n),所以不会进行数据获取。
解决方案:
方法1 : 创建一个新的String str = scanner.nextLine();去吞掉那个(\n);
while (flag){
System.out.println("请输入一个字符串:");
String str = scanner.nextLine();
System.out.println("str = "+str);
System.out.println("请输入一个数字:");
int num = scanner.nextInt();
System.out.println("num = "+num);
String str2 = scanner.nextLine();// 这一行!就可以吞掉上面的\n
}
方法2 : 每次开始循环就重新new一个Scanner扫描器对象,让之前的重置即可。
while (flag){
Scanner scanner = new Scanner(System.in); // 创建扫描器代码放入while中
System.out.println("请输入一个字符串:");
String str = scanner.nextLine();
System.out.println("str = "+str);
System.out.println("请输入一个数字:");
int num = scanner.nextInt();
System.out.println("num = "+num);
}
结果都可以解决问题:
总结:使用nextLine()方法在循环中要注意到当后面跟了nextInt()时,会将nextInt()没有
获取的\n吞掉!从而导致nextLine()在循环中被跳过变成了一个空字符的问题。