首先搞清楚nextLine() 和 next()、nextInt()、nextDouble()、nextFloat()方法读取问题
nextInt()读取结果为一个int类型数据,返回int值
nextFloat()读取结果为float类型,返回float值
next()读取结果为String类型,返回string类型
next Line()读取结果为String类型,返回string类型
-
nextLine()也是以回车符为结束,并且只是以回车符结束,并且会读取回车符
-
next(),nextInt()、nextDouble()和nextFloat()看到空格符或回车符都认为读取结束,此时不会读取回车符。
意思就是回车符只会留在这里等待下一个可以读取回车符号的读取流来把这个回车符接收掉 -
问:在使用nextLine()读取字符串的时候,有时候还没来得及输入就直接跳过了?
解决方式:参考链接
利用nextLine()方法读取一个空回车符
input.nextLine();
如果消息队列里面有回车符 可以加一个 input.nextLine();把消息队列清空,然后再去使用nextLine()方法
简易计算器的实现
-
此处用户输入x的值,空格或者回车(假设此处是回车),再输入y的值;
-
此时缓存中有:x的值、回车、y的值;
-
接着用nextDouble()方法接收x的值,遇到回车认为接收这个动作结束并且不会读取回车符;
-
此时缓存中还剩:回车、y的值;
-
nextDouble()方法和next()类似,遇到第一个有效字符才开始接收,此时缓存中第一个位置是空格或者回车,为无效字符,因此接下来的nextDouble()方法会跳过回车符,不接收,遇到y的值后判断为有效字符则接收。
package kaka;
import java.util.Scanner;
public class CalDemo {
//加法
public static void add(){
Scanner scanner=new Scanner(System.in);
System.out.println("请输入两个数字,以空格或者回车隔开: ");
double x=scanner.nextDouble();//键盘输入x的值
double y=scanner.nextDouble();//键盘输入y的值
System.out.println(x+y);
}
//减法
public static void minus(){
System.out.println("请输入两个数字,以空格或者回车隔开: ");
Scanner scanner=new Scanner(System.in);
double x=scanner.nextDouble();//键盘输入x的值
double y=scanner.nextDouble();//键盘输入y的值
System.out.println(x-y);
}
//乘法
public static void mul(){
System.out.println("请输入两个数字,以空格或者回车隔开: ");
Scanner scanner=new Scanner(System.in);
double x=scanner.nextDouble();//键盘输入x的值
double y=scanner.nextDouble();//键盘输入y的值
System.out.println(x*y);
}
//除法
public static void div(){
System.out.println("请输入两个数字,以空格或者回车隔开: ");
Scanner scanner=new Scanner(System.in);
double x=scanner.nextDouble();//键盘输入x的值
double y=scanner.nextDouble();//键盘输入y的值
System.out.println(x/y);
}
public static void main(String[] args){
for(int i=1;i<100;i++)
{
System.out.println("加法计算请输输入1");
System.out.println("减法计算请输输入2");
System.out.println("乘法计算请输输入3");
System.out.println("除法计算请输输入4");
Scanner scanner=new Scanner(System.in);
int x=scanner.nextInt();
switch(x){
case 1:
add();break;
case 2:
minus();break;
case 3:
mul();break;
case 4:
div();break;
default:
System.out.println("请输入1到4的数字");
break;
}
}
}
}