为何Math.max与Math.min无法正常运算?求非if-else实现方案
问题分析与解决方案
Hey there! Let's work through your problem step by step.
首先,咱们先找出你现有代码里 Math.min/Math.max 失效的直接原因:
你写的求最小值的代码是:
Math.min(x, Math.min(x, z))
这里重复传入了 x,完全没用到变量 y——不管 y 是多大或多小,这段代码只会返回 x 和 z 中的较小值,根本不是三个数的最小值。正确的三个数最小值应该是 Math.min(x, Math.min(y, z)),最大值是 Math.max(x, Math.max(y, z)),这就是你当前代码逻辑出错的核心点。
接下来,针对你“不用if-else实现获取三个整数的最小、中间、最大值”的需求,这里有几种简洁的方案:
方案1:利用算术推导中间值(纯Math工具类+运算)
既然三个数的总和减去最小值和最大值就是中间值,我们可以先正确计算出最小、最大值,再推导中间值,全程不用写任何if-else:
Scanner scan = new Scanner(System.in); System.out.println("Enter three integers(Use enter in between): "); int x = scan.nextInt(); int y = scan.nextInt(); int z = scan.nextInt(); int minVal = Math.min(x, Math.min(y, z)); int maxVal = Math.max(x, Math.max(y, z)); int midVal = x + y + z - minVal - maxVal; System.out.println(minVal + ", " + maxVal + ", " + midVal);
方案2:借助数组排序(代码层无if-else)
如果你能接受用数组排序(排序底层实现有条件判断,但你的代码里不需要写if-else),可以用更简洁的方式实现:
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("Enter three integers(Use enter in between): "); int[] nums = new int[3]; nums[0] = scan.nextInt(); nums[1] = scan.nextInt(); nums[2] = scan.nextInt(); Arrays.sort(nums); // 排序后数组元素从小到大排列 System.out.println(nums[0] + ", " + nums[2] + ", " + nums[1]); } }
这段代码里你只需要调用排序方法,直接取对应位置的元素即可,完全不用手动写条件判断。
方案3:纯数学表达式计算(无工具类依赖)
如果你连Math类都不想依赖,还可以用算术表达式直接计算两个数的最小/最大值,再扩展到三个数:
Scanner scan = new Scanner(System.in); System.out.println("Enter three integers(Use enter in between): "); int x = scan.nextInt(); int y = scan.nextInt(); int z = scan.nextInt(); // 利用数学公式计算最小值:(a + b - |a - b|)/2 = 两数较小值 int minVal = (x + y - Math.abs(x - y)) / 2; minVal = (minVal + z - Math.abs(minVal - z)) / 2; // 利用数学公式计算最大值:(a + b + |a - b|)/2 = 两数较大值 int maxVal = (x + y + Math.abs(x - y)) / 2; maxVal = (maxVal + z + Math.abs(maxVal - z)) / 2; int midVal = x + y + z - minVal - maxVal; System.out.println(minVal + ", " + maxVal + ", " + midVal);
内容的提问来源于stack exchange,提问作者RONALD CARROLL
相关产品推荐
相关产品推荐

