0
点赞
收藏
分享

微信扫一扫

解决nextLine()被跳过 + 关于Scanner变量赋值是否需要重新new Scanner的验证

ixiaoyang8 2022-01-23 阅读 52

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()在循环中被跳过变成了一个空字符的问题。

举报

相关推荐

0 条评论