Comment corriger une erreur en imprimant un jeu de cartes en Java?


Je suis en mission pour créer un jeu de cartes et imprimer de nombreuses façons. Mais j'ai un problème où le résultat est 52 cartes x 4 fois. Probablement un problème sur la déclaration de ma carte obj avec mon tableau de combinaisons, mais je ne sais pas comment le résoudre. Quelqu'un peut-il aider?

Donc, fondamentalement, j'ai fait une classe de carte qui contient la valeur de la carte/ou du rang, du costume et du visage(ce qui est imprimé sur la carte). Ensuite, une classe de Deck qui crée un tableau de 52 cartes et ajoute également une méthode de lecture aléatoire. Le but est d'imprimer des cartes avant et après le shuffle.

Le problème est dans la classe Deck, dont ma boucle pour son constructeur semble assez étrange qu'elle imprime x4 le résultat. J'ai essayé d'en déplacer mais cela ne fonctionne pas.

public Deck() {
    for (int i = 0; i<c.length;i++) {
        for (int j =0; j<suit.length;j++) {
            for (int k =0; k<face.length;k++) {
                s = suit[j];
                f = face[k];
                switch(f) {
                    case "2": v=2; break;
                    case "3": v=3; break;
                    case "4": v=4; break;
                    case "5": v=5; break;
                    case "6": v=6; break;
                    case "7": v=7; break;
                    case "8": v=8; break;
                    case "9": v=9; break;
                    case "10": v=10; break;
                    case "Queen": v=11; break;
                    case "Jack": v=11; break;
                    case "King": v=11; break;
                    case "Ace": v=12; break;
                }
                c[i] = new Card(v,s,f);
                System.out.println(c[i].toString());
            }
        }
    }            
}

Résultat attendu: 52 cartes affichées avant et après le shuffle

Author: Arun Sudhakaran, 2019-04-20

2 answers

Vous instanciez une nouvelle instance Card face.length * suit.length * c.length fois. Pourquoi parcourez-vous le tableau c? Si vous voulez créer une de chaque carte et les stocker dans c, faites quelque chose comme ceci:

int i = 0;
for (var suit : suits)
    for (var face : faces)
        c[i++] = new Card(suit, face);
 0
Author: Josh, 2019-04-20 05:50:41

Tout va bien, c'est juste que vous êtes initializing new card au mauvais endroit.

Comme ceci:

public Deck() {
    for (int i = 0; i<c.length;i++) {
        for (int j =0; j<suit.length;j++) {
            for (int k =0; k<face.length;k++) {
                s = suit[j];
                f = face[k];
                switch(f) {
                    case "2": v=2; break;
                    case "3": v=3; break;
                    case "4": v=4; break;
                    case "5": v=5; break;
                    case "6": v=6; break;
                    case "7": v=7; break;
                    case "8": v=8; break;
                    case "9": v=9; break;
                    case "10": v=10; break;
                    case "Queen": v=11; break;
                    case "Jack": v=11; break;
                    case "King": v=11; break;
                    case "Ace": v=12; break;
                }
            }
        }
        c[i] = new Card(Integer.pareInt(s),s,f);
        System.out.println(c[i].toString());
    }            
}
 -1
Author: Zain Arshad, 2019-04-20 06:35:54