仅用3个IF语句(无else)找出三个数的最大值和最小值
问题修正与解决方案
你的代码存在两个关键错误:
- 逻辑覆盖不全:仅处理了三种严格递增的数字排列,剩余5种排列(递减、乱序、存在相等值)完全未覆盖,导致这些场景下
biggest和smallest未初始化,运行时会抛出未赋值的错误。 - 赋值逻辑颠倒:比如当
n1 < n2 < n3时,最小值应为n1、最大值应为n3,但你的代码错误地将smallest设为n3、biggest设为n1,完全搞反了结果。
以下是符合要求的代码(仅用3个IF语句,无else、无数组):
double n1, n2, n3, biggest, smallest; Console.Write("First number: "); n1 = Convert.ToDouble(Console.ReadLine()); Console.Write("Second number: "); n2 = Convert.ToDouble(Console.ReadLine()); Console.Write("Third number: "); n3 = Convert.ToDouble(Console.ReadLine()); // 初始化最大最小值为第一个数,处理n2等于n1的情况 biggest = n1; smallest = n1; // 第一个IF:n2大于n1时更新最大最小值 if (n2 > n1) { biggest = n2; smallest = n1; } // 第二个IF:n2小于n1时更新最大最小值 if (n2 < n1) { biggest = n1; smallest = n2; } // 第三个IF:用n3更新当前的最大或最小值 if (n3 > biggest || n3 < smallest) { biggest = n3 > biggest ? n3 : biggest; smallest = n3 < smallest ? n3 : smallest; } Console.WriteLine(" Max: {0}", biggest); Console.WriteLine(" Min: {0}", smallest);
代码说明
- 先初始化
biggest和smallest为第一个数,处理n2等于n1的场景(此时前两个IF不触发,最大最小值保持为n1)。 - 前两个IF分别处理
n2大于或小于n1的情况,确定前两个数的最大最小值。 - 第三个IF通过三元运算符,在
n3比当前最大值大或比当前最小值小时,更新对应的变量,无需额外的IF语句。
内容的提问来源于stack exchange,提问作者ILoCo
相关产品推荐
相关产品推荐

