Java输入中nextInt后接nextLine值为空的问题

it2023-08-17  81

Java输入中nextInt后接nextLine值为空的问题

问题

今天在学Java基础问题做学生管理系统的时候遇到一个小问题,代码如下:

public static void addStu(ArrayList<HubuStudent> studentList){ //添加学生 HubuStudent stu = new HubuStudent(); Scanner sc = new Scanner(System.in); //键盘写入学生信息 System.out.println("请输入学生姓名"); String sname = sc.nextLine(); System.out.println("请输入学生学号"); String sno = sc.nextLine(); System.out.println("请输入学生年龄"); int sage = sc.nextInt(); System.out.println("请输入学生居住地"); String sarea = sc.nextLine(); //添加学生信息 stu.setSname(sname); stu.setSno(sno); stu.setSage(sage); stu.setSarea(sarea); //添加到学生集合中 studentList.add(stu); }

执行过程中发现,从键盘读入年龄后,居住地会直接跳过;设置断点调试后发现,sarea直接被赋了一个空值(""),多次实验发现问题出在nextInt()之后输入的回车里,输入学生年龄后会按下回车,而回车恰好会被下一行中的nextLine()所捕捉,导致sarea被直接赋了一个空字符串。

解决方法

这里提供三个解决本问题的思路:

思路一

第一个思路是调整顺序,也即将需要读入整数的放在最后(或者nextLine)后面:

System.out.println("请输入学生居住地"); String sarea = sc.nextLine(); System.out.println("请输入学生年龄"); int sage = sc.nextInt();

这样就避免了回车会被nextLine捕捉的情况;

思路二

第二个思路是将nextLine换成next,next并不会捕捉之前的回车;

System.out.println("请输入学生居住地"); String sarea = sc.next();
思路三

第三个思路最简单暴力,不过可能需要修改的地方会比较多,就是直接将年龄的类型也定义为String,这样所有的键盘读入时都使用nextLine,就不会出现上述的问题辣

private String sage; public String getSage() { return sage; } public void setSage(String sage) { this.sage = sage; } System.out.println("请输入学生年龄"); int sage = sc.nextLine(); System.out.println("请输入学生居住地"); String sarea = sc.nextLine();
最新回复(0)