本文主要介绍Java中条件判断时,if条件中有多个数值需要比较,条件比较多的简单优化写法。

一般较复杂的写法

public static void main(String[] args) {
for (int i = 100; i < 10000; i++) {
if (i % 2 ==0) {
if (i % 3 ==0) {
if (i % 4 ==0) {
if (i % 5 ==0) {
if (i % 6 ==0) {
if (i % 7 ==0) {
if (i % 8 ==0) {
if (i % 9 ==0) {
System.out.println(i);
break;
}
}
}
}
}
}
}
}
}
}

1、优化比较算法

您可以通过在%操作符右侧放置2到9的来一次测试所有这些可能情况

if (i % (2 * 3 * 4 * 5 * 6 * 7 * 8 * 9) == 0)

但由于某些数字包括其分解中的先前数字,因此您应使用较低的数字,特别是最小公倍数。8是2和4的倍数,9是3的倍数,如果产品中有8和9,则也覆盖6(2 * 3)。

if (i % (5 * 7 * 8 * 9) == 0)

结果是2520,这是最不常见的倍数。使用它会更具可读性

/**
* 目标是测试这个数字是否是所有整数的倍数
* 从2点到9点。从数学上讲,a的最小公倍数是a
* 所有输入数的倍数。这里,LCM(2,3)…9等于2520。iple of all its input numbers. Here, the LCM of 2, 3, ..., 9 is 2520.
*/
public static final int LCM_2_THRU_9 = 2520;

定义一个常量,我会在这里使用它:

if (i % LCM_2_THRU_9 == 0)

2、使用IntStream实现

for (int i = 100; i < 10000; ++i) {
int x = i;
if (IntStream.of(2, 3, 4, 5, 6, 7, 8, 9).allMatch(k -> x % k == 0)) {
System.out.println(i);
break;
}
}
-> 2520

int result = IntStream
.range(100, 10000)
.filter(i -> IntStream.of(2, 3, 4, 5, 6, 7, 8, 9).allMatch(k -> i % k == 0))
.findFirst()
.getAsInt();
System.out.println(result);

import java.util.stream.IntStream;

public static void main(String[] args) {
    for (int i = 100; i < 10000; i++) {
        int x = i; // x is effectively final
        if (IntStream.rangeClosed(2, 9).allMatch(n -> x % n == 0)) {
            System.out.println(i);
            break;
        }
    }
}
-> 2520

3、使用&&合成一个条件

public static void main(String[] args) {
    for (int i = 100; i < 10000; i++) {
        if (isPrintable(i)) {
            System.out.println(i);
            break;
        }
    }
}

private static boolean isPrintable(int value) {
    return value % 2 == 0
           && value % 3 == 0
           && value % 4 == 0
           && value % 5 == 0
           && value % 6 == 0
           && value % 7 == 0
           && value % 8 == 0
           && value % 9 == 0;
}

4、通过for循环

public static boolean isDivisible(int number) {
for (int i = 2; i <= 9; i++) {
if (num % i != 0) {
return false;
}
}
return true;
}
public static void main(String[] args) {
for (int i = 100; i <= 100000; i++) {
if (isDivisible(i)) {
System.out.println("Divisible by numbers 2...9: " + i);
break;
}
}
}

相关文档Java if多个字符串条件判断的简单写法