技术问询:作业要求禁用分支、循环,用Math.max/min求三个数第二小值
解决方案:用Math.max()/Math.min()求三个数的第二小值(禁用分支/循环)
嘿,很高兴能帮你搞定这个作业问题!先看你现有的代码,功能是对的,但确实用到了题目禁止的三元运算符,咱们用题目允许的Math方法来重构一下就好。
核心思路
三个数的第二小值,其实可以通过三个数的总和减去最小值,再减去最大值来得到——不管三个数里有没有重复值,这个逻辑都能稳稳得到第二小的数。而最小值和最大值刚好可以用Math.min()和Math.max()嵌套获取。
修正后的代码
import java.util.Scanner; public class SecondSmallest { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int a, b, c, secondSmallest; System.out.print("Enter three numbers.\n> "); a = scanner.nextInt(); b = scanner.nextInt(); c = scanner.nextInt(); // 计算三个数的最小值和最大值 int min = Math.min(Math.min(a, b), c); int max = Math.max(Math.max(a, b), c); // 总和减去最小和最大值,得到第二小值 secondSmallest = a + b + c - min - max; System.out.print(secondSmallest); scanner.close(); // 记得关闭Scanner,养成良好编码习惯 } }
代码说明
- 完全符合题目限制:没有使用任何
if-else、三元运算符或循环,仅依赖Math.min()和Math.max()实现 - 嵌套调用
Math.min(Math.min(a,b),c)可以快速获取三个数中的最小值,同理Math.max(Math.max(a,b),c)得到最大值 - 总和减去最小和最大值后,剩下的就是处于中间位置的数——也就是第二小值(哪怕有重复值,比如
2,2,3,结果也会正确返回2)
对比你原来的实现
你原来的三元写法逻辑没问题,但违反了题目限制,上面的代码不仅满足要求,可读性也更强哦。
内容的提问来源于stack exchange,提问作者weakit




