总结
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()是以空格键为结束标志,所以避免了以上问题的出现。
文章讨论了在Java中使用Scanner类进行用户输入时遇到的问题,即当结合使用nextDouble和nextInt后,程序提前结束,无法接收后续的nextLine输入。问题的原因在于nextInt不读取后续的换行符,导致nextLine立即结束。解决方案包括在nextInt和nextLine之间添加nextLine或改用next方法来避免这个问题。

281

被折叠的 条评论
为什么被折叠?



