Java中连续输入时的nextLine()被跳过现象
1 出问题的题目
import java.util.Scanner;
public class S4 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
long number;
String gender;
double cn,math,eng,aver,sum;
System.out.println("学号:");
number=in.nextLong();
System.out.println("性别:");
gender=in.nextLine();//使用nextLine读取数据发现被跳过(若改为next读取则不会被跳过)
System.out.println("语文分数:");
cn=in.nextDouble();
System.out.println("数学分数:");
math=in.nextDouble();
System.out.println("英语分数:");
eng=in.nextDouble();
sum=cn+eng+math;
aver=sum/3;
System.out.print("学号:"+number+" 性别:"+gender+" 语文分数:"+cn);
System.out.print(" 数学分数:"+math+" 英语分数:"+eng);
System.out.print(" 平均分:"+aver+" 总分:"+sum);
in.close();
}
}
nextLine读入时的提示:
学号:123
性别://性别未输入,直接被跳过
语文分数:
next读入时的提示:
学号:
123
性别:
man//未被跳过,可以正常读入
语文分数:
123
2 出问题的原因
首先我们要知道的是,nextInt只读取输入的整数,但是我们按下回车代表这个数输入完毕时,\n并未被nextInt方法读入,而是被nextLine方法读入,导致nextLine方法看似并未读入,其实是读入了我们看不到的 \n
3 解决方案
方案一
在需要nextLine方法跟在nextInt方法后面时,将nextLine改变为next。
原理:next()方法,当我们在什么都不输入时并不会返回,而nextLine()方法会在什么都不输入时返回。
例:
import java.util.Scanner;
public class S4 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
long number;
String gender;
double cn,math,eng,aver,sum;
System.out.println("学号:");
number=in.nextLong();
System.out.println("性别:");
gender=in.next();//改为next方法输入
System.out.println("语文分数:");
cn=in.nextDouble();
System.out.println("数学分数:");
math=in.nextDouble();
System.out.println("英语分数:");
eng=in.nextDouble();
sum=cn+eng+math;
aver=sum/3;
System.out.print("学号:"+number+" 性别:"+gender+" 语文分数:"+cn);
System.out.print(" 数学分数:"+math+" 英语分数:"+eng);
System.out.print(" 平均分:"+aver+" 总分:"+sum);
in.close();
}
}
方案二
在使用完后nextInt方法后,在后面紧随一个nextLine方法,吸收掉nextInt多余的\n后,再使用nextLine方法读入数据。
例:
import java.util.Scanner;
public class S4 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
long number;
String gender,absorb;
double cn,math,eng,aver,sum;
System.out.println("学号:");
number=in.nextLong();
System.out.println("性别:");
absorb=in.nextLine();//吸收多余的\n
gender=in.nextLine();
System.out.println("语文分数:");
cn=in.nextDouble();
System.out.println("数学分数:");
math=in.nextDouble();
System.out.println("英语分数:");
eng=in.nextDouble();
sum=cn+eng+math;
aver=sum/3;
System.out.print("学号:"+number+" 性别:"+gender+" 语文分数:"+cn);
System.out.print(" 数学分数:"+math+" 英语分数:"+eng);
System.out.print(" 平均分:"+aver+" 总分:"+sum);
in.close();
}
}
结论:无论看起来多简单的题目都要去尝试!!!!