У меня есть лаборатория для класса (нам разрешено искать внешнюю помощь), создавая klondike solitaire. Я полный noob, когда дело доходит до программирования (это мой первый класс в программировании). Мы только что узнали о перечислениях, и мне нужно построить колоду, используя их (я просмотрел другие вопросы об этом, но я не нашел решение, которое соответствует тому, что мне нужно). У нас есть две перечисления (ранг и костюм):
public enum Rank {
ACE,
TWO,
THREE,
FOUR,
FIVE,
SIX,
SEVEN,
EIGHT,
NINE,
TEN,
JACK,
QUEEN,
KING;}
а также
public enum Suit {
CLUBS,
SPADES,
HEARTS,
DIAMONDS;}
Теперь мне нужно объединить их в массив под названием Deck, который стоит как таковой:
public Deck() {
cards = new Card[52];
}
Чтобы положить карты в колоду, я пытался использовать ".values", но я не могу понять это правильно. В этой лаборатории есть тестовый код, и он говорит, что я не получаю ни одного из пунктов для этого. Что я делаю не так?
public void fill() {
for (int i = 0; i<52;i++){
for (Suit s : Suit.values()) {
for (Rank r : Rank.values()) {
cards[i]= new Card(r,s);
}
}
}
}
Буду признателен за любую оказанную помощь. Благодарю!
Вы заявляете,
Теперь мне нужно объединить их в массив под названием Deck, который стоит как таковой:
Нет, вам нужно создать классную карточку, в которой есть одно поле каждого перечисления. Только после этого вы можете создать палубу своих карт. Итак, сделайте это - создайте класс Card, дайте ему по крайней мере два поля, по одному для каждого перечисления, плюс соответствующий конструктор, плюс getters, плюс приличный toString()
а затем вы установите.
Кроме того, это неправильно:
public void fill() {
for (int i = 0; i<52;i++){ // get rid of this loop
for (Suit s : Suit.values()) {
for (Rank r : Rank.values()) {
cards[i]= new Card(r,s);
}
В приведенном выше коде будет поставлено 52 карты в каждое индексное место. Например, он попытается набить все 52 карты в место карты [0], то же самое для элемента карты [1], и будет добавлена только последняя карта. У вас будет массив из 52 King of Diamonds - не то, что вы хотите.
Вместо этого избавиться от внешнего цикла и вместо этого увеличить я внутри вашего цикла:
public void fill() {
int i = 0;
for (Suit s : Suit.values()) {
for (Rank r : Rank.values()) {
cards[i]= new Card(r,s);
i++; // increment i here
}
}
}