Java实现10个输入数最大最小值功能时跳首数异常(未用数组)
问题核心成因
你的代码出现输入错位、初始值错误的原因非常明确,一共两个核心逻辑错误:
- 初始化逻辑完全不符合课程要求:课程明确约束必须将用户输入的第一个数值作为最大值、最小值的初始值,但你当前的代码在弹出输入提示后,连续调用三次
nextInt()读取内容:第一次读到的用户输入被存入numInput后没有任何后续处理,相当于直接丢弃;第二次读到的用户输入被直接赋值给smallestValue,第三次读到的输入被直接赋值给largestValue——这正是程序跳过用户第一个输入、将第二个输入值设为最小值的直接原因。 - 循环计数逻辑错位:代码在读完三个值后,才将初始值为1的counter自增为2,之后循环设置的终止条件是
counter !=9,意味着循环体只会再读取7个输入,整体统计范围、读取数量和“收集10个数字做计算”的需求完全错位。
符合课程要求的修正方案
修正思路严格贴合“不使用数组、第一个输入值作为最大/最小值初始基准”的约束,调整逻辑如下:
- 弹出输入提示后,首先读取第一个用户输入值
- 把这个值同时赋值给
smallestValue和largestValue作为初始值 - 将计数标记为已读取1个数字,通过循环读取剩余9个数字,每次读取后同步比较、更新最大/最小值
- 循环终止后直接输出结果
修正后的完整可运行代码:
int smallestValue; int largestValue; int numInput; int counter = 1; Scanner input = new Scanner(System.in); System.out.print("Enter a set of 10 numbers: "); // 读取第一个输入值,作为最大、最小值的初始基准 numInput = input.nextInt(); smallestValue = numInput; largestValue = numInput; // 循环读取剩余9个数字(总读取数达到10个时终止) while (counter < 10) { numInput = input.nextInt(); counter++; // 独立判断更新最大值、最小值 if (numInput > largestValue) { largestValue = numInput; } if (numInput < smallestValue) { smallestValue = numInput; } } System.out.println("Smallest is " + smallestValue); System.out.println("Largest is " + largestValue);
优化说明
- 直接删除了代码中从未被实际使用的冗余变量
numSets,减少无意义的代码冗余 - 把原来嵌套的
else if判断替换为两个独立的if判断,避免逻辑分支遗漏:原代码中如果输入值大于当前最大值,会直接跳过最小值的判断,虽然大多数场景下不会触发错误,但独立判断的逻辑更严谨 - 把容易引发计数偏移的循环终止条件
counter !=9,替换为和总需求对齐的counter <10,从逻辑上保证程序一定会读满10个输入值,不会因为初始计数的偏移出现少读、多读的问题
内容的提问来源于stack exchange,提问作者IamJose
相关产品推荐
相关产品推荐

