nextLine和next的踩坑

@java出糗日记

小白学习大数据,第一次发帖献给JAVA;

昨天用java写一个模拟计算器的程序,只要求简单的加减乘除,目的是熟悉语法;

因为只要求实现功能即可,难度不大,所以不一会就写出来了,没有用方法,全放在main里面实现:
package Method;

import java.util.Scanner;

public class Demo05 {
public static void main(String[] args) {

    double a = 0.0;
    String f = " ";
    double b =0.0;

    Scanner scanner = new Scanner(System.in);

    while(true){
        System.out.println("请输入第一个数字:");
        if (scanner.hasNextDouble()){
            a = scanner.nextDouble();
        }
        System.out.println("请输入运算符:");
        if (scanner.hasNextLine()){
            f = scanner.nextLine();
        }
        System.out.println("请输入第二个数字:");
        if (scanner.hasNextDouble()){
            b = scanner.nextDouble();
        }
        switch(f){
            case "+":
                System.out.println("结果是:"+(a+b));
                break;
            case "-":
                System.out.println("结果是:"+(a-b));
                break;
            case "*":
                System.out.println("结果是:"+(a*b));
                break;
            case "/":
                System.out.println("结果是:"+(a/b));
                break;
            default:
                System.out.println("输入不合法!");
        }

    }
}

}
可是一运行发生了bug,输入完第一个数字之后,直接跳过了第二个输入到了第三个:
请输入运算符直接跳过了
解决办法:
将第二个输入的nextLine换成next即可解决问题:
在这里插入图片描述
那么为什么换成next就行了呢?
首先next是必须有输入才会停止阻塞,而nextLine是检测到enter,就将enter之前的输入读取并停止阻塞;因为每一次输入完之后都会按enter完成输入,所以猜想出现异常的原因是上一次输入enter之后,只读取了内容,enter并没有消除,所以导致下一次的nextLine只读取到了空,导致直接跳过了第二个输入;

猜想验证:
如果前一个输入不是nextDouble而是nextLine并不会出现这种状况,因为nextLine在缓存完所有输入之后会跳过该行,下一次自然读取不到enter了;
可是nextDouble的输入机制我还没有弄清?新人小白求大佬赐教。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值