仅在循环的所有迭代中满足条件时执行操作

时间:2016-08-12 13:05:17

标签: c# for-loop

是否有办法在for循环的所有次迭代中满足条件时才触发操作?

示例:

if ((i % 1 == 0) && (i % 2 == 0) && (...) && (i % 20 == 0))
{
    Do action x
}

这是我尝试过的,但它没有按预期工作:

for (int b=1; b<21; b++)
{
    if (i % b == 0)
    {
        // Do something
    }
}

9 个答案:

答案 0 :(得分:94)

你也可以使用像这样的简单LINQ查询:

if (Enumerable.Range(1, 20).All(b => i % b == 0))
    DoAction();

答案 1 :(得分:88)

有经典的解决方案:

var flag = true

首先我们假设满足所有条件(循环):if (i % b != 0)。 如果不满足至少一个条件:break;,我们停止循环过程:flag = false因为无需继续检查,并设置flag,现在通过SomeAction()变量我们知道检查的结果,以后可以使用它来确定我们是否应该调用{{1}}。

答案 2 :(得分:37)

如何:

if (i % 232792560 == 0) {
    // do action
}

如果您想检查您的号码是否可以被大量数字整除,那相当于检查您的号码是否可以被所有这些号码的最小公倍数整除。在这种情况下,那2 4 * 3 2 * 5 * 7 * 11 * 13 * 17 * 19.

答案 3 :(得分:25)

所以你想链接一些非常相似的布尔表达式,而不是明确地写出它们。

if ((i % 1 == 0) && (i % 2 == 0) && (...) && (i % 20 == 0))
{
    do action x
}

您可以做的第一件事是将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);
}
然后可以像您尝试的那样使用DivisibleByAllUpTo20()循环实现

for

private static bool DivisibleByAllUpTo20(int i)
{
    for (int b = 1; b < 21; b++)
    {
        if (i % b != 0)
            return false;
    }

    return true;
}

顺便说一句:LINQ命名空间提供了许多辅助方法,可以让您更简洁,更清晰地编写代码:

using System.Linq;

// ...

if (Enumerable.Range(1, 20).All(n => n % i == 0))
{
    // do action x
}

答案 4 :(得分:11)

易:

bool isDividable = true;
for(int b=1; b<21; b++)
{
     if (i % b != 0)
     {
         isDividable = false;
         break;
     }
}

if(isDividable) do something

答案 5 :(得分:5)

bool flag = true;
for(int b=1; b < 21 && (flag &= (i % b == 0)) ; b++)
    ;
if(flag)
   do_action();//do your task

答案 6 :(得分:3)

if (action)
{
// do your action 
}

之后:

var flag = true;
for(int b = 2; b < 21; b++)
{
     if (i % b != 0)
     {
         flag = false;
         break;
     }
}
if(flag)
   SomeAction():

希望它有所帮助。:)

答案 7 :(得分:3)

你可以像这样写

pyplot

当一个条件为假时,将bool设置为false,因此只有在所有条件都为真时才执行bool doAction = true; for(int b=1;b<21;b++) { if (!(i % b == 0)) { doAction = false; } } if (doAction) { do action x; }

您也可以使用Linq在更少的行中执行此操作:

do action x;

说明:Enumerable.Range返回值为1到20的Array,.All检查每个对象的Lambda表达式。

答案 8 :(得分:3)

这里有很多类似的答案,使用旗帜。一个更简单的解决方案是使用循环变量(问题中的b)作为测试条件:

int b;
int max = 20;

for (b = 1; b <= max && i % b == 0; ++b) ;

if (b > max) {
    // do something
}