关于为什么java中nextInt()和nextLine()不能混用 | nextInt()和nextInt()之类的可以一起用

java键盘录入的区别:

第一套体系:遇到空格、回车结束本次输入,并且本次输入不接收空格和回车

  • nextInt()、nextDouble()、next() 遇到空格、回车就结束本次输入,只接收空格和回车之前的数据内容,空格以及空格之后的数据(包括回车)都在缓冲区内,如果有下一个待输入的变量值,会将缓冲区内的值传递给下一个变量,但是不会接收缓冲区内的空白、回车字符

举例:两个nextInt()可以连着用

Scanner sc = new Scanner(System.in);
int num1 = sc.nextInt();  // 输入 "123 321\n",读取123,缓冲区剩余 " 321\n"
int num2 = sc.nextInt();  // 读取 321(跳过空格),缓冲区剩余 "\n"
System.out.println(num1); // 输出 123
System.out.println(num2); // 输出 321

解释: 第一个输入123 321 回车,缓冲区内是 321 回车,由于缓冲区内已经有值了,所以会直接交给第二个变量,由于nextInt()不会接收空格和回车,所以直接输出321;连续使用 nextInt() 是安全的,因为会忽略缓冲区中的前导空白字符(比如空格)

第二套体系:遇到回车结束本次输入,并且接收空格和回车

  • nextLine():本次输入接收空格(和残存在缓冲区内的回车),回车结束输入,回车不会放在缓冲区内
    举例:nextLine不会将回车放入缓冲区
        Scanner sc = new Scanner(System.in);
        String s1 = sc.nextLine(); //输入123  234
        String s2 = sc.nextLine(); //输入999 888
        System.out.println(s1); //输出123  234
        System.out.println(s2); //输出999 888
        //证明了nextLine不会将\n放入缓冲区导致下一个nextLine无法正常输入

nextInt()和nextLine()不可以混着用:因为nextInt会将回车放入缓存区,nextLine可以读入缓存区内的回车,导致无法输入正确的值

Scanner sc = new Scanner(System.in);
int num = sc.nextInt();  // 输入 "3\n",读取3,缓冲区剩余 "\n"
String name = sc.nextLine(); // 读取到残留的 "\n",name 为 ""(空字符串)
System.out.println(name); // 输出空行
//因为nextInt输入的回车放在缓冲区,nextLine会读入回车,直接结束

解决办法:可以在每次输入完之后使用nextLine()清除一下缓存区

int num = sc.nextInt(); // 输入 "3\n",读取3,缓冲区剩余 "\n"
sc.nextLine(); // 清除缓冲区的 "\n"
String name = sc.nextLine(); // 正常等待输入

PS:第一套体系相当于c++的cin,第二套体系相当于c++的getline

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值