If/else if

Résolu
Bonjour,

je vous explique rapidement, je fais une map pour un jeu mais j'ai un petit probléme de génération de motif

en gros je veux ce motif comme ça :
V = vide

VVVVVVVVVVVV...
VVVVVVVVVVVV...
VVVV##VVVV##...
VVVVVVVVVVVV...
VVVVVVVVVVVV...
V##VVVV##VVV...
VVVVVVVVVVVV...
VVVVVVVVVVVV...
VVVV##VVVV##...
VVVVVVVVVVVV...
VVVVVVVVVVVV...
V##VVVV##VVV...
....


Alors qu'avec ce code :
        for(int l = 1; l < board.length-1; l++) {
            for(int c = 1; c < board[0].length-1; c++) {
                if ( l%6==0 && (c%6==1 || c%6==2)) {
                    board[l][c] ='#';
                }
                else if ( l%3==0 && ((c+1)%6==0 || (c+1)%6==5)){
                    board[l][c] = '#';
                }
            }
        }

Les deux boucle if sont bonnes, elles me font ce qui est attendu mais
je vu que si n%6 = 0 alors n%3 = 0
MAIS
normalement un simple else if devrait débloquer cette situation ? non ?
je tourne en rond depuis 1h, après promis je vais me coucher...
actuelle j'ai ça :

VVVVVVVVVVVV...
VVVVVVVVVVVV...
VVVV##VVVV##...
VVVVVVVVVVVV...
VVVVVVVVVVVV...
V##V##V##V##...
VVVVVVVVVVVV...
VVVVVVVVVVVV...
VVVV##VVVV##...
VVVVVVVVVVVV...
VVVVVVVVVVVV...
V##V##V##V##...
....


2 réponses

  1.         boolean paire = false;
            for(int l = 1; l < board.length-1; l++) {
                for(int c = 1; c < board[0].length-1; c++) {
                    if ( l%6==0 && (c%6==1 || c%6==2)) {
                        board[l][c] = '#';
                        paire = true;
                    }
                    if ( l%3==0 && ((c+1)%6==0 || (c+1)%6==5) && !paire){
                        board[l][c] = '#';
                    }
                    paire = false;
                }
            }

    bloqué par 6 lignes de code, LE REVE TOTAL
    1. je précise que même cela me donne le même mauvais résultat
    2.         for(int l = 1; l < board.length-1; l++) {
                  for(int c = 1; c < board[0].length-1; c++) {
      
                      if ( l%6==0){
                          if (c%6==1 || c%6==2){
                              board[l][c] = new Mur_Indestructible(l, c, this);
                          }
                      } else if ( l%3==0 ){
                          if ((c+1)%6==0 || (c+1)%6==5){
                              board[l][c] = new Mur_Indestructible(l, c, this);
                          }
                      }
                  }
              }


      Problème résolu, des fois c'est plus long, mais au moins ça fonctionne !!!
  2. Modérateur
    Bonjour,

    Si tu fais un else, il s'applique sur l'ensemble de la condition, pas juste sur la partie l%6 à moins de la décomposer :

    if (l % 6 == 0) {
        if (c % 6 == 1 || c % 6 == 2)
            board[l][c] = '#';
    } else if (l % 3 == 0) {
        if (c % 6 == 4 || c % 6 == 5)
            board[l][c] = '#';
    }

    Remarque : tu peux aussi faire tout ça en une seule condition :

    if ((l % 6 == 0 && (c % 6 == 1 || c % 6 == 2))
            || (l % 6 != 0 && l % 3 == 0 && (c % 6 == 4 || c % 6 == 5)))
         board[l][c] = '#';
    1. oui effectivement, j'aurais dû faire un graphe de contrôle