循环Scanner查找最小值时始终得到0,代码问题排查求助
问题分析与修复方案
核心问题点
- 初始值干扰结果:你把
Lowest初始化为0,而终止输入的0会被纳入比较逻辑,最终覆盖掉实际输入的最小值。 - 逻辑分支遗漏:使用
else if意味着只有当当前数不大于largest时才会检查最小值,会漏掉大量需要更新最值的场景(比如当前数比最大值小但比最小值大时,或者第一个输入的数)。 - 循环流程缺陷:第一次进入循环就直接读取输入,初始的
x=1没有起到预期作用,若用户直接输入0,会直接输出初始的0作为最值。
修复后的代码
import java.util.Scanner; public class Loop_Scanner { public static void main(String[] args) { int x; Integer largest = null; Integer lowest = null; Scanner input = new Scanner(System.in); System.out.println("Enter the number (input 0 to terminate): "); while (true) { x = input.nextInt(); if (x == 0) { break; // 输入0直接终止,不参与最值计算 } // 初始化最值为第一个有效输入 if (largest == null && lowest == null) { largest = x; lowest = x; } else { if (x > largest) { largest = x; } if (x < lowest) { lowest = x; } } } // 处理无有效输入的情况 if (largest == null) { System.out.println("No valid numbers entered."); } else { System.out.println("The Largest Number is: " + largest); System.out.println("The Smallest Number is: " + lowest); } } }
关键改进说明
- 用包装类规避初始值问题:将
largest和lowest初始化为null,可以准确判断是否有有效输入,避免固定初始值干扰结果。 - 分离终止逻辑:输入0时直接跳出循环,不参与最值比较,彻底解决0被误判为最小值的问题。
- 独立判断最值:去掉
else if,分别检查最大值和最小值,确保每个有效输入都被正确评估。 - 增加边界处理:如果用户直接输入0,会提示无有效数字,避免错误输出。
内容的提问来源于stack exchange,提问作者Ali Mohammed
相关产品推荐
相关产品推荐

