@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的输入机制我还没有弄清?新人小白求大佬赐教。