简化(while)上的多个类似语句

时间:2014-09-06 05:28:04

标签: java module while-loop simplify

例如,假设我有这个:

while( i1 % 1!=0 || i1 % 2!=0 || i1 % 11!=0 || i1 % 16!=0 ||
        i1 % 7!=0 ||i1 % 3!=0 ||i1 % 12!=0 ||i1 % 17!=0 ||
        i1 % 8!=0 ||i1 % 4!=0 ||i1 % 13!=0 ||i1 % 18!=0 ||
        i1 % 9!=0 ||i1 % 5!=0 ||i1 % 14!=0 ||i1 % 19!=0 ||
        i1 % 10!=0 ||i1 % 6!=0 ||i1 % 15!=0 ||i1 % 20!=0 ) {}

我该如何简化? 就像i1的1-20模块不同于0.而没有那么混乱。 请原谅,如果这是一个愚蠢的问题,我对此很新。

2 个答案:

答案 0 :(得分:2)

您可以创建一个为您生成语句的方法,并使用forloop迭代20个数字并检查每个数字的模数是否不等于零。

<强>样品:

    public boolean checkModulos(int toCheck)
    {
        for(int i = 0; i < 20; i++)
        {
            if(toCheck % i != 0)
                return true;
        }

        return false;
    }

使用它是:

while(checkModulos(i1))

答案 1 :(得分:0)

您可以稍微使用该语句。根据DeMorgan的定律(!A || !B == !(A &&B)),您可以将其转换为!(i1 % 1 == 0 && i1 % 2 == 0 ... && i1 % 20 == 0)

现在想一下这句话。另一个等于零的数字意味着第一个数字可被第二个整除。这意味着该陈述的确如下:不是(i1可被所有数字1-20整除)。因此,找到一个可被所有数字1-20整除的数字n,并使循环变为while( !(i1 % n == 0) ),或仅while(i1 % n != 0)