Je regardais juste la version de 2048 que j'avais écrite et je me suis rendu compte que j'avais écrit quatre méthodes différentes pour se déplacer et fusionner vers le haut, la gauche, le bas et la droite.

La fusion gauche / droite et haut / bas est similaire, mais l'une boucle 0-3 et les autres boucles 3-0. Pour le moment, je ne peux penser qu'à une seule façon de paramétrer cela: passer un index de départ (3 ou 0), un incrémenteur (1 ou -1) et un index de fin (0 ou 3). Cela semble être une mauvaise idée. Y a-t-il un meilleur moyen?

1
arrey 25 déc. 2015 à 19:27

2 réponses

Meilleure réponse

Vous pouvez réutiliser le même for et gérer la condition lorsque vous utilisez réellement la variable.

void f(boolean isLeft) {
    int n = 3;
    for ( int i = 0 ; i <= n ; i++ ) {
        // add here the condition, without a change in for
        if ( isLeft ) {
            // use i
        } else {
            // use n-i
        }
    }
}

Il suffit donc de ne transmettre qu ' un argument au lieu de 3 arguments à cette fonction.

Alors:

  • si vous avez laissé = & gt; isLeft est true
    • i prendra les valeurs suivantes dans cet ordre: 0, 1, 2, 3
  • si vous avez droit = & gt; isLeft est false
    • n-i prendra les valeurs suivantes dans cet ordre: 3, 2, 1, 0
2
ROMANIA_engineer 25 déc. 2015 à 17:20

Puisque le langage de programmation n'est pas mentionné, j'écris la fonction C.

void loop(int direction, int length)
{
    // Assuming direction > 0 is left
    int offset = direction > 0 ? 0 : (length - 1);
    int sign = direction > 0 ? 1 : -1;
    for (int i = 0; i < length; i++) {
        int index = sign * i + offset;
        //doSomethingOnIndex(index);
    }
}

Ici length est le nombre d'itérations. Pour une utilisation à gauche loop(1, 3); et pour une utilisation à droite loop(0, 3);

0
mak 25 déc. 2015 à 17:00