例如,假设我有这个:
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.而没有那么混乱。 请原谅,如果这是一个愚蠢的问题,我对此很新。
答案 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)