如何将Java代码中的9层嵌套if语句合并为单个判断?
嘿,你的代码能正常运行但嵌套确实有点冗余,我给你几个精简的思路,一步步来优化:
方法1:合并嵌套条件为单个if语句
最直接的改进就是把多层嵌套的if合并成一个,用逻辑与&&连接所有条件,这样逻辑完全和原代码一致,但可读性提升很多:
public static void main(String[] args) { for (int i = 100; i < 10000; i++) { if (i % 2 == 0 && i % 3 == 0 && i % 4 == 0 && i % 5 == 0 && i % 6 == 0 && i % 7 == 0 && i % 8 == 0 && i % 9 == 0) { System.out.println(i); break; } } }
方法2:简化检查的除数(利用倍数关系)
仔细看一下个位数的整除条件,其实很多数是其他数的倍数,我们可以去掉重复的检查:
- 能被8整除的数,必然能被2和4整除
- 能被9整除的数,必然能被3整除
- 同时满足8和9的数,已经包含了2和3的因子,所以也能被6整除
所以实际上只需要检查5、7、8、9这四个数就够了,代码会更简洁,运行效率也更高:
public static void main(String[] args) { for (int i = 100; i < 10000; i++) { if (i % 5 == 0 && i % 7 == 0 && i % 8 == 0 && i % 9 == 0) { System.out.println(i); break; } } }
方法3:直接计算最小公倍数(最优雅的解法)
这个问题本质上是求1-9的最小公倍数(LCM),我们可以用数学方法直接计算,不用遍历数字,这是最高效的解法:
首先需要先实现求最大公约数(GCD)的函数,然后通过GCD计算两个数的LCM,再依次和剩下的数计算最终的LCM:
// 计算两个数的最大公约数(GCD) public static int gcd(int a, int b) { while (b != 0) { int temp = b; b = a % b; a = temp; } return a; } // 通过GCD计算两个数的最小公倍数(LCM) public static int lcm(int a, int b) { return (a * b) / gcd(a, b); } public static void main(String[] args) { int result = 1; // 计算1到9的最小公倍数 for (int num = 2; num <= 9; num++) { result = lcm(result, num); } System.out.println(result); // 输出2520 }
这种方法不仅精简,还能轻松扩展到更大的数字范围,而不用调整循环条件。
内容的提问来源于stack exchange,提问作者getRect
相关产品推荐
相关产品推荐

