Java Scanner输入问题:输入1,2,3,4,5,a时为何未读取数字5?
为什么输入包含5时程序只计算到sum=10?
让我们一步步拆解你的代码逻辑和输入场景,找出问题所在:
核心问题:逻辑顺序完全搞反了
你的代码里先执行int number = scanner.nextInt();读取一个数字,然后用scanner.hasNextInt()检查下一个输入是否是整数。只有当下一个输入是整数时,才把当前读取的数字加入sum;如果下一个输入不是整数(比如你的输入里的a),就直接进入else分支打印结果——此时刚读取的数字(也就是5)根本没机会被加入sum!
举个具体的流程例子,当输入到5之后:
- 代码读取到
number=5 - 检查下一个输入是
a,不是整数,isAnInt=false - 直接进入else分支,打印之前累计的sum(1+2+3+4=10)和avg(10/4=2),然后退出循环,5被完全丢弃了。
输入逗号带来的额外问题
你的输入是"1, 2, 3, 4, 5, a",但Scanner.nextInt()只会识别**空白字符(空格、换行、制表符)**分隔的整数。逗号不属于空白字符,所以当你输入1,之后,nextInt()读取1,下一个待解析的内容是",2"(逗号加2),这时候nextInt()尝试解析这个内容会直接抛出InputMismatchException。不过你说得到了sum=10,说明实际输入大概率是用空格分隔的(比如1 2 3 4 5 a),但核心问题还是逻辑顺序错误。
额外的小坑:整数除法导致平均计算不准
你的avg = Math.round((sum)/count);里,sum和count都是int类型,所以sum/count是整数除法(比如10/4=2,而不是2.5),之后再调用round结果还是2。如果想要正确的四舍五入,应该先把sum转成double类型再计算:Math.round((double)sum/count)。
修正后的代码示例
import java.util.Scanner; public class InputCalculator { public static void inputThenPrintSumAndAverage(){ Scanner scanner = new Scanner(System.in); int sum = 0; int count = 0; // 正确逻辑:先判断是否有下一个整数,再读取处理 while(scanner.hasNextInt()){ int number = scanner.nextInt(); sum += number; count++; } // 计算平均,同时避免count为0时的除以0异常 long avg = 0; if(count > 0){ avg = Math.round((double)sum / count); } System.out.println("SUM = " + sum + " AVG = " + avg); scanner.close(); } }
内容的提问来源于stack exchange,提问作者user14549997
相关产品推荐
相关产品推荐

