You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

技术问询:作业要求禁用分支、循环,用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

火山引擎 最新活动