32 votes

Effectuer une action uniquement si une condition est remplie dans toutes les itérations d'une boucle.

Existe-t-il un moyen de ne déclencher une action que lorsqu'une condition est remplie dans la base de données de l'UE ? tous itérations d'un for boucle ?

Exemple :

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

C'est ce que j'ai essayé, mais cela n'a pas fonctionné comme prévu :

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

94voto

Kinetic Points 2256

Vous pouvez également utiliser une simple requête LINQ comme celle-ci :

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

88voto

Slava Utesinov Points 10557

Il existe une solution classique :

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

Dans un premier temps, nous supposons que toutes les conditions (boucles) sont remplies : var flag = true . Si au moins une condition n'est pas remplie : if (i % b != 0) nous arrêtons le processus de bouclage : break; car il n'y a pas besoin de continuer à vérifier, et mettre flag = false maintenant via flag nous connaissons le résultat de notre vérification et pouvons l'utiliser plus tard pour déterminer si nous devons appeler la variable SomeAction() ou pas.

37voto

Barry Points 45207

Pourquoi pas juste :

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

Si vous voulez vérifier que votre nombre est divisible par de nombreux nombres, cela revient à vérifier si votre nombre est divisible par le plus petit commun multiple de tous ces nombres. Dans ce cas, c'est 2 4 *3 2 *5*7*11*13*17*19.

25voto

Abbondanza Points 800

Vous voulez donc enchaîner un certain nombre d'expressions booléennes très similaires sans les écrire toutes explicitement.

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

La première chose que vous pourriez faire est d'extraire l'expression combinée utilisée dans le fichier if dans une nouvelle fonction. Cela rend votre code plus lisible.

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() peut alors être mis en œuvre avec un for boucle comme si vous aviez essayé.

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

    return true;
}

À propos : l'espace de noms LINQ fournit de nombreuses méthodes d'aide qui vous permettent d'écrire ce type de code de manière beaucoup plus concise et propre :

using System.Linq;

// ...

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

11voto

HimBromBeere Points 8328

Facile :

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

if(isDividable) do something

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X