Как исправить ошибку печати колоды карт на Java? - PullRequest
0 голосов
/ 20 апреля 2019

Мне поручено создать колоду карт и распечатать их разными способами. Но у меня возникла проблема, когда результат составляет 52 карты х 4 раза. Возможно, возникла некоторая проблема, связанная с объявлением моей карты obj с помощью массива мастей, но я не знаю, как это исправить. Кто-нибудь может помочь?

Итак, в основном я создал класс Card, который содержит значение карты / или ранга, масти и лица (что напечатано на карте). Затем класс Deck, который создает массив из 52 карт и добавляет метод shuffle. Цель состоит в том, чтобы напечатать карты до и после перемешивания.

Проблема в классе Deck, который в моем цикле для его конструктора кажется странным, что он печатает x4 результат. Я пытался переместить некоторые, но не работает.

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());
            }
        }
    }            
}

Ожидаемый результат: 52 карты до и после тасования

Ответы [ 2 ]

0 голосов
/ 20 апреля 2019

Все хорошо, просто вы initializing new card не в том месте.

Как это:

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());
    }            
}
0 голосов
/ 20 апреля 2019

Вы создаете новый Card экземпляр face.length * suit.length * c.length раз.Почему вы перебираете массив c?Если вы хотите создать одну из каждой карты и сохранить их в c, сделайте что-то вроде этого:

int i = 0;
for (var suit : suits)
    for (var face : faces)
        c[i++] = new Card(suit, face);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...