老师,关于scanner.next()提问
代码如下:
public float[] initScore(Scanner scanner) {
int n = 0;
while (n < 1) {
System.out.println("请输入要存储的数学成绩的数量:");
try {
n = scanner.nextInt();
if (n < 1) {
System.out.println("数量最少为1,请重新输入!");
scanner.next();
}
} catch (InputMismatchException e) {
System.out.println("您输入的不是整数,请重新输入!");
scanner.next();
}
}
float[] scores = new float[n];
for (int i = 0; i < n; i++) {
System.out.println("请输入第" + (i + 1) + "个数据:");
try {
scores[i] = (float) scanner.nextDouble();
if (scores[i] < 0) {
System.out.println("成绩不能小于0,请重新输入!");
i--;
}
} catch (InputMismatchException e) {
System.out.println("您输入的不是数字,请重新输入!");
scanner.next();
i--;
}
}
return scores;
}老师可以看一下截图里面的两个scanner.next(),为什么catch模块的scanner.next()可以接收到数据,而if模块的不行,这是我的一个疑问点。辛苦老师解疑答惑。
再描述下现象,就是如果执行catch模块会有数据直接填充scanner.next(),如果执行if模块的就不会有数据自动填充scanner.next();导致每次执行if模块需要手动输入个内容,删除掉该代码就会是自动执行流程了;我的理解是两个模块的流程基本上是一样的,为什么catch必须加入next()才能正常执行而if模块加入后反而影响程序的自动执行。
正在回答 回答被采纳积分+1
看了一下其他同学的提问,大概知道是为什么了,我解释一下老师可以看看理解的是否正确。
关于catch里面的调用next()目的是为了接收scanner中存储的那个无法被正常转化为int类型的字符串,接收后scanner保存的那个字符串就会被销毁才可以进行下个数据的正常接收,所以调用next()是为了清空scanner接收的数据。
关于if模块里面的next(),因为nextInt()已经将接收到的字符串转化为int数据,已经达到了销毁清空scanner接收的数据,如果再调用next(),程序就会等待你再输入一个字符串内容,只有输入了才能继续执行。
- 参与学习 人
- 提交作业 8788 份
- 解答问题 9886 个
综合就业常年第一,编程排行常年霸榜,北上广深月薪过万! 不需要基础,无需脱产即可学习,只要你有梦想,想高薪! 全新升级:技术栈升级(包含VUE3.0,ES6,Git)+项目升级(前后端联调与功能升级)
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星