Как исправить ошибку печати колоды карт в Java?

#java #arrays #loops

#java #массивы #циклы

Вопрос:

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

Итак, в основном я создал класс карт, который содержит значение карты / или ранга, масти и лица (то, что напечатано на карте). Затем класс 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 карты, отображаемые до и после перетасовки

Комментарии:

1. Вы должны добавить соответствующий языковой тег к вашему вопросу.

Ответ №1:

Вы создаете экземпляр нового 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);
  

Комментарии:

1. О, я забыл также скопировать это, c — это экземпляр массива класса Card — или колода, длина 52 для 52 карт

2. Хорошо, но нет причин перебирать этот массив, если вы пытаетесь создать 52 экземпляра карт.

Ответ №2:

Все в порядке, просто вы находитесь 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());
    }            
}
  

Комментарии:

1. Уважаемый избиратель, что не так в моем решении? Чтобы я мог это исправить.

2. Привет, я забыл скопировать верхнюю ее часть, подумал, что этих строк достаточно, lol, я уже объявил переменную v, поэтому parseInt не тот (я пробовал, но у вас не получилось). Снова мой вывод показывает 52 карты, но некоторые из них имеют размер x4, может быть, один костюм, но я знаю, как я могу правильно его упорядочить.