4.24 Java实验作业:求解三个整数的最大绝对值数(程序报错求助)
解决Java程序输出最大绝对值数的错误问题
嘿,我来帮你搞定这个问题!你的代码里有两个关键错误导致结果不对,咱们一步步拆解:
错误分析
多余的分号破坏了条件逻辑
你第三个else if语句后面多写了一个分号;:} else if ( z > x && z > y) ; {这个分号会让
else if的条件判断变成一个空语句,后面的{ System.out.print(Math.abs(z)); }会无条件执行,不管z是不是真的最大,这直接覆盖了前面的判断结果——比如输入10 -30 29时,前面的条件都不满足,就会直接输出z的绝对值29,而不是正确的30。判断逻辑方向错误
你的代码是先比较原数的大小,再取绝对值,但我们需要的是绝对值最大的数,不是原数最大的数。比如输入-30时,它的原数比10和29都小,但绝对值是最大的,你的代码里y > x && y > z这个条件永远不会成立(因为-30<10),所以根本不会走到输出y的绝对值的分支,这就完全偏离了需求。
修正后的代码方案
方案1:修正if-else逻辑(清晰易懂)
import java.util.Scanner; public class LabProgram { public static void main(String[] args) { Scanner in = new Scanner(System.in); int x = in.nextInt(); int y = in.nextInt(); int z = in.nextInt(); // 先计算每个数的绝对值,方便后续比较 int absX = Math.abs(x); int absY = Math.abs(y); int absZ = Math.abs(z); // 比较绝对值的大小,找出最大的那个 if (absX >= absY && absX >= absZ) { System.out.println(absX); } else if (absY >= absX && absY >= absZ) { System.out.println(absY); } else { System.out.println(absZ); } } }
方案2:用Math.max简化代码(更简洁)
如果不想写繁琐的if-else,可以直接用Math.max嵌套来找出最大的绝对值:
import java.util.Scanner; public class LabProgram { public static void main(String[] args) { Scanner in = new Scanner(System.in); int x = in.nextInt(); int y = in.nextInt(); int z = in.nextInt(); // 先两两比较绝对值,最终得到最大的那个 int maxAbsValue = Math.max(Math.abs(x), Math.max(Math.abs(y), Math.abs(z))); System.out.println(maxAbsValue); } }
验证示例
输入10 -30 29时,两个方案都会输出30,完全符合需求。
内容的提问来源于stack exchange,提问作者Erick Guerrero
相关产品推荐
相关产品推荐

