Java使用do-while循环求五数的和、均值、最值时的代码问题排查
问题排查与修正方案
嘿,我一眼就看出问题出在哪了,咱们一步步来理清楚:
核心问题分析
- 最值判断逻辑位置错误:你用来更新
max和min的if语句块是在do-while循环结束之后才执行的,这意味着它只会对最后一个输入的数字做判断,前面4个数字完全没参与最值的比较,难怪结果不对! - 初始值设置不合理:你把
min和max初始化为0,如果输入的数字全是正数,min会一直停留在0;如果全是负数,max也会保持0,这显然不符合咱们要找输入数字里最值的需求。
修正后的代码
import java.util.*; public class Kleine { public static void main(String[] args) { Scanner scan = new Scanner(System.in); double average; int count = 0, sum = 0, num, min, max; System.out.println("Please enter five numbers to evaluate:"); // 先读取第一个数字,用它来初始化min和max num = scan.nextInt(); sum += num; min = num; max = num; count = 1; // 用do-while循环读取剩下的4个数字 do { num = scan.nextInt(); sum += num; // 每次读取新数字后立刻更新最值 if (num > max) { max = num; } if (num < min) { min = num; } count++; } while (count < 5); average = (double) sum / 5; // 强制转成double避免整数除法截断问题 System.out.println("Your average is: " + average); System.out.println("The sum is: " + sum); System.out.println("Your maximum number is: " + max); System.out.println("Your minimum number is: " + min); } }
关键修改点说明
- 调整最值判断位置:把
if (num > max)和if (num < min)放到do-while循环内部,这样每输入一个数字,就会立刻和当前的max、min比较并更新,确保所有数字都参与了最值计算。 - 合理初始化最值:先读取第一个数字,用它来初始化
min和max,这样初始值就是用户实际输入的数字,不会出现0干扰的问题。 - 修复整数除法问题:原来的
sum / 5是整数除法(因为sum和5都是int),如果sum不是5的倍数,结果会被截断。改成(double) sum /5,先把sum转成double再做除法,能得到精确的小数结果。
测试你之前的输入1 10 5 -3 6,修正后的代码会输出:
Please enter five numbers to evaluate: 1 10 5 -3 6 Your average is: 3.8 The sum is: 19 Your maximum number is: 10 Your minimum number is: -3
这就完全符合预期啦!
内容的提问来源于stack exchange,提问作者Kleine Hansel Buenafe
相关产品推荐
相关产品推荐

