Création d'un tableau de puzzle de nombres coulissants à l'aide de tableaux en Java


Je suis donc un peu nouveau sur Java et j'ai décidé de créer un puzzle de nombres coulissants. Voici ce que j'ai:

int[] puz = {1,2,3,
             4,5,6,
             7,8,9}
for(int i=0; i<puz.length; i++){
    System.out.println(puz[i]);
}

Le 1 est censé être l'endroit vide mais je le découvrirai plus tard. Mon problème est que le code imprime:

1
2
3
4
5
6
7
8
9

Quand je veux qu'il imprime:

1 2 3
4 5 6
7 8 9

J'ai également essayé de faire une boucle imbriquée que je suis trop gêné de montrer ici en raison de la façon dont c'était hideux. Est-ce que j'essaierais d'utiliser un tableau 2d à la place?

Author: ProgrammingNoob, 2017-03-02

3 answers

Je suppose que vous pourriez essayer...

int puz = {1,2,3,4,5,6,7,8,9};
int n = Math.ceil(Math.sqrt(puz.length));
for (int i = 0; i < puz.length; i++) {
    System.out.print(puz[i] + ((i + 1) % n == 0 ? "\r\n" : " ");
}
 1
Author: Vulpecula.J, 2017-03-02 02:47:55

Essayez de créer un compteur de variables et incrémentez-le chaque fois que vous parcourez la boucle. À l'aide d'un opérateur de module, divisez-le par 3 et lorsque le reste vaut 0, créez une nouvelle ligne.

int puz = {1,2,3,4,5,6,7,8,9};

int counter = 1;
for(int i=0; i<puz.length; i++){
    System.out.print(puz[i]);
    if (counter % 3 == 0){
        System.out.println("");
    }
    counter++;
}
 1
Author: pratikpncl, 2017-03-02 04:17:16

L'astuce ici est d'utiliser l'opérateur de module. Cet opérateur divise un nombre par un autre et renvoie le reste. En java (et partout ailleurs pour autant que je sache), % est l'opérateur de module. Si vous voulez que chaque troisième nombre ait un saut de ligne après, divisez simplement par trois en utilisant la division de module, comme ceci:

int[] puz = {1,2,3,4,5,6,7,8,9};
    //For what it's worth, you don't have this semicolon in your question, so I added it in.
for(int i=0; i<puz.length; i++){
    System.out.print(puz[i] + " ");
    if(i % 3 == 2){//It's equal to 2 because you start at 0 and not 1.
        System.out.println("");
    }
}

Ce code, lorsqu'il est exécuté, imprime ce qui suit, ce que vous vouliez:

1 2 3 
4 5 6 
7 8 9 
 0
Author: UnknowableIneffable, 2017-03-02 02:26:09