Java中Scanner的next?方法总结与常见问题

文章讨论了在Java中使用Scanner类进行用户输入时遇到的问题,即当结合使用nextDouble和nextInt后,程序提前结束,无法接收后续的nextLine输入。问题的原因在于nextInt不读取后续的换行符,导致nextLine立即结束。解决方案包括在nextInt和nextLine之间添加nextLine或改用next方法来避免这个问题。

总结

scanner中常常包括以下几种方法
在这里插入图片描述

常见问题:

代码

Scanner scr=new Scanner(System.in);
        System.out.println("请输入机票原价:");
        double price=scr.nextDouble() ;
        System.out.println("请输入月份:");
        int month=scr.nextInt();
       /* scr.nextLine();*/
        System.out.println("请输入经济舱还是头等舱:");
        String kind=scr.nextLine() ;

运行结果:
在这里插入图片描述
可以看到在还没有输入经济舱还是头等舱的时候程序已经结束了,这是什么原因呢?

解决方法:

方法一:
在第二个输入和第三个输入之间添加代码:

scr.nextLine();

运行结果:
在这里插入图片描述
从运行结果可以看到问题已经得到了相应的解决。
原因分析:
让我们回到文章开头的方法的表格,从表格中我们可以看出nextline()用法是以“\n”结束接收的。那让我们来分析一下三个代码运行的过程:
首先,我们要清楚回车键相当于输入一个’\n’.
double price=scr.nextDouble() ;
输入数值 回车’\n’
int month=scr.nextInt();
输入数值 回车’\n’
注意:此时nextInt()在接受完数值之后就已经结束了,那么后面的‘\n’就被nextLine()接收到了,而’\n’是nextLine()接收语句的结束标志,所以三个输入已经全部接收完毕,程序运行结束。所以解决方法就是在nextInt()与nextLine()之间插入一个nextInt()接收语句来接受多余的一个空格。

方法二:
不使用nextLine()语句接受字符串,用next()语句替代,因为next()是以空格键为结束标志,所以避免了以上问题的出现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值