Voici un code sur lequel je travaille, pour construire un labyrinthe avec un motif comme celui-ci où j'implémente un tableau 2D.

L'idée de la mienne, essaie d'abord de construire un '@' complet dans un tableau 2D, et toutes les lignes impaires que je lui donne ''. Ça ne se termine pas encore

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        System.out.println("Maze Dimension: ");
        int dim = sc.nextInt();

        //dimension
        char[][] maze = new char[dim][dim];
        int baris = maze.length;
        System.out.println("rows : " + baris);
        int kolom = maze[0].length;
        System.out.println("column : " + kolom);

        //initialize rows and column;
        int initBaris;
        int initKolom;

        for (initBaris = 0; initBaris < baris; initBaris++) {
            if (initBaris % 2 != 1) {
                for (initKolom = 0; initKolom < kolom; initKolom++) {
                    System.out.print(maze[initBaris][initKolom] = '@');
                }
            } else {
                for (initKolom = 0; initKolom < kolom ; initKolom++) {
                    System.out.print(maze[initBaris][initKolom] = ' ');
                }
            } System.out.println();
        }
    }
}

Le résultat de mon code est indiqué ci-dessous:

@@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@

Je veux le résultat comme ci-dessous:

@ @@@@@@@@@@@@@
@             @  
@@@@@@@@@@@@@ @
@             @  
@ @@@@@@@@@@@@@
@             @  
@@@@@@@@@@@@@ @
@             @  
@ @@@@@@@@@@@@@
@             @  
@@@@@@@@@@@@@ @
@             @  
@ @@@@@@@@@@@@@
@             @  
@@@@@@@@@@@@@ @

Je manque de logique ici, pour être simple. Signification - Je ne sais pas comment arriver au résultat attendu, alors je cherche des conseils sur la façon d'adapter le code donné.

2
user3610391 5 août 2017 à 17:33

2 réponses

Meilleure réponse

En plus des conseils de GhostCat que vous devez absolument appliquer, compte tenu de votre code actuel:

  1. J'essaierais de valider l'entrée pour la dimension. En effet puisque vous voulez que la première et la dernière rangée soient des murs (@) et que chaque rangée de murs soit séparée par des rangées d'espaces / couloirs, vous aurez toujours un nombre impair de lignes (vous pouvez diminuer / augmenter la dimension de 1 si l'entrée% 2 == 0 signifiant quand l'entrée est paire).

Ensuite, vous avez actuellement deux "blocs logiques" dans l'initialisation de votre structure: un pour les lignes impaires et un pour les lignes paires.

  1. Pour les lignes paires (couloirs dans votre labyrinthe), remplissez simplement la première et la dernière colonne.

  2. Maintenant, pour vos rangées impaires, vous voulez alterner la «porte», n'est-ce pas? Vous avez besoin d'un "interrupteur / interrupteur" qui indique l'état: porte à la colonne index 2 (début de ligne) ou index N-1 (fin de ligne). Avoir une condition vérifiant l'index de la ligne ou avoir un booléen qui fera très bien l'affaire. Avec un booléen, changez son état à chaque processus de ligne impaire. Ensuite, lorsque votre valeur booléenne est vraie, placez votre porte au début de la ligne, sinon à la fin. N'oubliez pas de ne pas le faire pour la dernière ligne si vous voulez qu'elle soit fermée.

0
Maaaatt 5 août 2017 à 15:14

@GhostCat a raison. Regardez ce que vous voulez être le résultat:

@ @@@@@@@@@@@@@
@             @  
@@@@@@@@@@@@@ @
@             @  
@ @@@@@@@@@@@@@
@             @  
@@@@@@@@@@@@@ @
@             @  
@ @@@@@@@@@@@@@
@             @  
@@@@@@@@@@@@@ @
@             @  
@ @@@@@@@@@@@@@
@             @  
@@@@@@@@@@@@@@@

N'essayez pas d'écrire tout l'algorithme en même temps. Créez-le étape par étape.

1) Votre labyrinthe fonctionne-t-il avec chaque nombre de lignes?

2) Y a-t-il des lignes qui diffèrent complètement des autres lignes?

3) Y a-t-il un motif qui peut être trouvé dans l'une de vos lignes?

4) Décrivez le modèle des lignes de chemin.

6) Combien de types de lignes murales pouvez-vous identifier?

7) Décrivez un motif pour chacun des types de lignes de mur.

Etc.

...

À https://ideone.com/DBOJRy cela fonctionne:

//import java.util.Scanner;

public class Main 
{
    public static void main(String[] args) 
    {
        //Scanner sc = new Scanner(System.in);
        int dim = 16; //sc.nextInt();
        System.out.println("Maze Dimension: " + dim);


        //dimension
        char[][] maze = new char[dim][dim];
        int baris = maze.length;
        System.out.println("rows : " + baris);
        int kolom = maze[0].length;
        System.out.println("column : " + kolom);

        //initialize rows and column;
        int initBaris;
        int initKolom;

       baris -= (baris%2 !=0) ? 1 : 2;

       for (initBaris = 0; initBaris < baris; initBaris++) 
        {
            System.out.print(maze[initBaris][0] = '@');

            if (initBaris % 2 != 1) 
            {
                System.out.print(maze[initBaris][1] = (initBaris%4!=2)?' ':'@');

                for (initKolom = 2; initKolom < kolom-2; initKolom++) 
                {
                    System.out.print(maze[initBaris][initKolom] = '@');
                }
                System.out.print(maze[initBaris][kolom-2] = (initBaris%4!=2)?'@':' ');
            }
            else 
            {
                for (initKolom = 1; initKolom < kolom-1 ; initKolom++) 
                {
                    System.out.print(maze[initBaris][initKolom] = ' ');
                }
            } 

            System.out.print(maze[initBaris][kolom-1] = '@');

            System.out.println();
        }

        for (initKolom = 0; initKolom < kolom ; initKolom++) 
        {
            System.out.print(maze[baris][initKolom] = '@');
        }
    }
}            
2
davidxxx 5 août 2017 à 15:24