有没有办法只在循环的所有迭代中满足条件时触发动作for?
例:
if ((i % 1 == 0) && (i % 2 == 0) && (...) && (i % 20 == 0))
{
Do action x
}
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的,但它没有按预期工作:
for (int b=1; b<21; b++)
{
if (i % b == 0)
{
// Do something
}
}
Run Code Online (Sandbox Code Playgroud)
Kin*_*tic 94
您还可以使用像这样的简单LINQ查询:
if (Enumerable.Range(1, 20).All(b => i % b == 0))
DoAction();
Run Code Online (Sandbox Code Playgroud)
Sla*_*nov 88
有经典的解决方案:
var flag = true;
for(int b = 2; b < 21; b++)
{
if (i % b != 0)
{
flag = false;
break;
}
}
if(flag)
SomeAction():
Run Code Online (Sandbox Code Playgroud)
首先,我们假设,所有的条件(循环)得到满足:var flag = true.如果不满足至少一个条件:if (i % b != 0),我们停止循环过程:break;因为不需要继续检查和设置flag = false,现在通过flag变量我们知道我们检查的结果,并且可以在以后使用它来确定我们是否应该调用SomeAction().
Bar*_*rry 37
怎么样:
if (i % 232792560 == 0) {
// do action
}
Run Code Online (Sandbox Code Playgroud)
如果你想检查你的号码是否可被大量数字整除,这相当于检查你的号码是否可以被所有这些号码的最小公倍数整除.在这种情况下,那是2 4*3 2*5*7*11*13*17*19.
Goo*_*ide 25
所以你想链接一些非常相似的布尔表达式,而不是明确地写出它们.
if ((i % 1 == 0) && (i % 2 == 0) && (...) && (i % 20 == 0))
{
do action x
}
Run Code Online (Sandbox Code Playgroud)
您可以做的第一件事是将if语句中使用的组合表达式提取到一个新函数中.这使您的代码更具可读性.
public static void Main()
{
// ...
if (DivisibleByAllUpTo20(i))
{
//do action x
}
// ...
}
private static bool DivisibleByAllUpTo20(int i)
{
return (i % 1 == 0) && (i % 2 == 0) && (...) && (i % 20 == 0);
}
Run Code Online (Sandbox Code Playgroud)
DivisibleByAllUpTo20()然后可以for像你尝试过的循环一样实现.
private static bool DivisibleByAllUpTo20(int i)
{
for (int b = 1; b < 21; b++)
{
if (i % b != 0)
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句:LINQ命名空间提供了许多帮助方法,使您可以更简洁,更清晰地编写此类代码:
using System.Linq;
// ...
if (Enumerable.Range(1, 20).All(n => n % i == 0))
{
// do action x
}
Run Code Online (Sandbox Code Playgroud)
Him*_*ere 11
简单:
bool isDividable = true;
for(int b=1; b<21; b++)
{
if (i % b != 0)
{
isDividable = false;
break;
}
}
if(isDividable) do something
Run Code Online (Sandbox Code Playgroud)
bool flag = true;
for(int b=1; b < 21 && (flag &= (i % b == 0)) ; b++)
;
if(flag)
do_action();//do your task
Run Code Online (Sandbox Code Playgroud)