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

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();
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值