伙计们上述代码的任何可能的耐火代码

guys any possible refractory code for the above code

伙计们,我想修改这个 if 或块,以便动态地根据执行的内容或条件来划分值 x。

    public boolean isUgly(int n) {
        boolean isUgly=true;
        while(n>0)
        {
            if(n%2==0||n%3==0||n%5==0)
            {
                n = n/x //<-------- here i want x should be based on the if condition where or is true
            }
            else {
                isUgly=false;
                break;
            }
        }
    return isUgly;
    }

试试下面的代码,这样你就可以根据条件划分n,但是这个方法总是return false 因为在任何情况下,它都会执行else 语句 当然可以。你的目标是什么?

public boolean isUgly(int n) 
    {
        boolean isUgly=true;
        while(n>0)
        {
            if(n%2==0)
            {
                n = n/2;
            }
            else if(n%3==0)
            {
                n = n/3;
            }
            else if(n%5==0)
            {
                n = n/5;
            }
            else 
            {
                isUgly=false;
                break;
            }
        }
        return isUgly;
    }

您正在寻找这样的东西吗?

public static boolean isUgly(int n) {
    final int[] uglyPrimes = {2, 3, 5};
    boolean isUgly = true;
    while (n > 1 && isUgly) {
        isUgly = false;
        for (int x : uglyPrimes) {
            if (n % x == 0) {
                n = n / x;
                isUgly = true;
            }
        }
    }
    return isUgly;
}

当然,我会这样实现:

public static boolean isUgly(int n) {
    while (n > 1 && n % 2 == 0)
        n /= 2;
    while (n > 1 && n % 3 == 0)
        n /= 3;
    while (n > 1 && n % 5 == 0)
        n /= 5;
    return (n <= 1);
}

或者这样:

public static boolean isUgly(int n) {
    for (int x : new int[] { 2, 3, 5 })
        while (n > 1 && n % x == 0)
            n /= x;
    return (n <= 1);
}

所有 3 个解决方案确实应该在方法的开头添加以下内容,但这超出了挑战的范围:

if (n <= 0)
    throw new IllegalArgumentException("Invalid value: " + n);