Tableau et test logique

Bonjour à tous,

J'aimerais faire une boucle qui vérifie une condition pour chaque élément du tableau.
Jusque la ça semble simple

Mon code suit donc la structure suivante :

if (Dil_Vial[Numero_Vial] == 2)
{
  if (Numero_Rotation == 0 || 2 || 4 || 7)
  {
    SeqRemoveAt(ML_STAR.Dil_Maintenance,Sequence_Suppr)
  }
}


ça semble facile, mais mon "compilateur" ne l'accepte pas. Sur la ligne if (Dil_Vial[Numero_Vial] == 2) j'ai une erreur
error 1002 : syntax error before symbol '=='
error 1002 : syntax error before symbol ')'
error 1002 : syntax error before symbol ')'
error 1002 : syntax error before symbol 'Unspecified token'
error 1002 : syntax error before symbol 'Unspecified token'
error 1002 : syntax error before symbol ';'

J'ai réussi à contourner via le code suivant :

i = Dil_Vial[Numero_Vial];
if (i == 2)
{
  if (Numero_Rotation == 0 || 2 || 4 || 7)
  {
    SeqRemoveAt(ML_STAR.Dil_Maintenance,Sequence_Suppr);
  }
}


Donc il apparait clairement que mon soucis est la manière dont je donne le tableau dans ma fonction if.

Le truc c'est que j’apprends sur le tas. J'ai contourné mon problème mais j'ai l'impression de passer à coté de quelque chose.
Comment faire pour éviter la petite pirouette supplémentaire ?

Merci de vos réponsesfox 83.0

5 réponses

  1. Bonjour Froyorst,

    Je me trompe peut-être, mais ton test, ce ne serait pas plutôt:

    if (Numero_Rotation == 0 || Numero_Rotation == 2 || Numero_Rotation == 4 || Numero_Rotation == 7)


    ???
    0
    1. Salut,

      Non je ne pense pas.

      if (Numero_Rotation == 0 || 2 || 4 || 7)


      n'est-il pas l'équivalent de

      if (Numero_Rotation == 0 || Numero_Rotation == 2 || Numero_Rotation == 4 || Numero_Rotation == 7)


      Mais de toute façon ce n'est pas ça le souci, c'est vraiment lié à la ligne

      if (Dil_Vial[Numero_Vial] == 2)
      0
  2. Ok, je voulais m'en assurer, donc l'instruction ne signifie pas:

    si Numero_Rotation égal 0 ou bien égal 2 ou bien égal 4 ou bien égal 7 ....

    C'est n'est pas ça le souci (sans s à la fin), mais il fallait bien s'assurer qu'il n'y avait pas déjà un problème à ce niveau ..
    0
    1. Contributeur
      Salut,

      Phil_1857 a raison de t'alerter sur ton code
      if (Numero_Rotation == 0 || 2 || 4 || 7)
      , qui ne fait pas ce que tu penses.

      Cela ne déclenche pas d'erreur de compilation, mais fonctionne ainsi : la partie de droite
      0 || 2 || 4 || 7
      est évaluée (à 1) et comparée à la partie de gauche (Numero_Rotation) et ce n'est pas ce que tu veux faire. Cette erreur n'est donc pas à l'origine de ton erreur de compilation, mais tu as intérêt à la corriger.

      Il manque aussi un point virgule à la fin de ta ligne 5 dans le code qui te renvoie des erreurs. Cette erreur, en revanche, devrait renvoyer une erreur de syntaxe bloquant la compilation (point-virgule que tu as mis, par contre, dans le code qui est réputé "marcher").

      Pour le reste, on n'a probablement pas assez d'éléments pour hasarder d'autres réponses.

      Dal
      0
      1. Bonjour Dal,

        Effectivement, et c'est valable dans tous les langages de programmation

        Je voulais être sûr que Froyorst faisait ça en toute conscience

        Mais même maintenant, on n'en est pas encore sûr ...
        0
        1. Contributeur
          En lisant https://forums.commentcamarche.net/forum/affich-36958667-tableau-et-test-logique#2 je n'ai pas de doutes que Froyorst ne veut pas faire cela :-)

          C'est une erreur, même si elle ne génère pas de blocage à la compilation.

          Ce qui devrait générer une erreur à la compilation, par contre, est l'absence de ; à la fin de la ligne appelant SeqRemoveAt()

          Ensuite, on ne sait pas ce que sont des différents objets ou leurs types. Il pourrait y avoir d'autres erreurs.
          0
      2. oui , c'est vrai que ce serait se compliquer, dans ce cas-là mieux vaudrait faire

        if (Numero_Rotation == 1) :-)
        0