2015-01-10 3 views
2

Я знаю, что это было задано многими людьми раньше (и я немного огляделся, прежде чем приходить сюда), но я не могу понять, как исправить мой код. Моя задача - создать статический метод makeDeck, который возвращает ArrayList, содержащий 52 карты стандартной колоды карт. Я довольно новичок в ArrayLists, поэтому я не совсем уверен, правильно ли инициализирую ArrayList makeDeck. Это то, что я до сих пор:Создание колоды карт с использованием ArrayList

public class Card 
    { 
     private String mySuit; 
     private int myValue; 

     public Card(String suit, int value) 
     { 
     mySuit = suit; 
     myValue = value; 
     } 

     public String name() 
     { 
     String[] cardNames = 
      { 
      "Deuce", "Three", "Four", "Five", 
      "Six", "Seven", "Eight", "Nine", "Ten", 
      "Jack", "Queen", "King", "Ace" 
      }; 

     return cardNames[ myValue - 2 ] + " of " + mySuit; 
     } 
    } 

    public class MainClass 
    { 
     public static void displayCards(ArrayList<Card> a) 
     { 
     int i; 
     System.out.println("Size is " + a.size()); 
     for (i = 0 ; i < a.size() ; i++) 
     { 
      Card c = a.get(i); 
      System.out.println("#" + (i+1) + ": " + c.name()); 
     } 
     } 

    public static ArrayList<Card> makeDeck() 
    { 
     ArrayList<Card> cards = new ArrayList<Card>(); 
     String[] cardNames = 
      { 
      "Deuce", "Three", "Four", "Five", 
      "Six", "Seven", "Eight", "Nine", "Ten", 
      "Jack", "Queen", "King", "Ace" 
      }; 
     String[] suits = { "spades", "hearts", "diamonds", "clubs" }; 

      for (int a=0; a<=cardNames.length(); a++) 
      { 
       for (int b=0; b<= suits.length(); b++) 
       { 
        cards.add(new Card(cardNames[a], suits[b])); //I've noticed many people use this to add the card names and suits to the cards ArrayList, and it gives me an error of not being able to turn suits[b] into an integer, so I'm confused as to how it worked for others 

       } 
      } 
return cards; 
    } 

    public static void main(String[] args) 
    { 
     System.out.println(makeDeck()); 
    } 

Если кто-то может пожалуйста помочь мне понять, что я делаю неправильно, я был бы очень благодарен. Спасибо!

+0

Что вы видите? – christopher

+0

добавить карты возврата в конце функции makeDeck – MYK

+0

Это моя текущая ошибка: MainClass.java:31: ошибка: несовместимые типы: строка не может быть преобразована в int cards.add (новая карта (cardNames [a], костюмы [б])); , но я уверен, что есть и другие. –

ответ

2

Вы передаете две строки вашему Card конструктору. Прежде чем вы удалили код класса Card, я увидел, что ваш конструктор ожидает String и int. Вот почему вызов конструктора не компилируется.

Кроме того, вы забыли вернуть значение в методе makeDeck(), и ваш cards список является локальным для этого метода, так что вы не можете получить к нему доступ с вашего основного метода, и вы не имеете метод cards() в любом случае ,

Ваш главный метод должен быть:

public static void main(String[] args) 
{ 
    System.out.println(makeDeck()); 
} 

Ваш makeDeck() должен иметь return cards; заявление в его последней строке.

И вы должны либо сменить конструктор вашего класса Card, либо изменить аргометы, которые вы ему передаете.

С текущей реализацией Вашего класса карты, вероятно, вы должны изменить цикл создания карты для:

for (int a=0; a < suits.length; a++) 
    { 
     for (int b=0; b< 13 ; b++) 
     { 
      cards.add(new Card(suits[a],b)); 
     } 
    } 

Вы, вероятно, придется изменить name() метод Card хотя.

+0

IDE, который я использую, - это стиль «Заполняющий пробел», поэтому я не могу ничего изменить с помощью конструктора карты. Поэтому, как бы я изменил int, который ожидает String? –

+0

@MichaelWendel см. Мое редактирование. Вы должны передать int вместо строки. И имя костюма должно быть первым параметром. – Eran

+0

Я добавил в ваше последнее редактирование, и теперь он говорит мне, что не может найти символ для suits.length(). Кроме того, как мне удастся передать int без редактирования класса Card, потому что я не могу сделать это с веб-сайтом, который я использую? –

1

Вам необходимо сделать makeDeck() return cards. Также в главном заявлении для печати вы встречаете назвать makeDeck() вместо cards()

В относительно вашей ошибки string cannot be converted to int вам нужно сделать одну из двух вещей:

1) Измените конструктор класса Card, чтобы взять в две строки:

Public Card(string value, string suit) 

И изменить int myValue к string myValue

2) измените массив cardName быть int вместо о f string. в качестве альтернативы Вы можете игнорировать cardNames все вместе и изменить вставки на следующее:

cards.add(new Card(suits[b], a+1)); 
0

return добавить заявление, которое будет возвращать список массива.

public static ArrayList<Card> makeDeck() 
    { 
     ArrayList<Card> cards = new ArrayList<Card>(); 
     String[] cardNames = 
      { 
      "Deuce", "Three", "Four", "Five", 
      "Six", "Seven", "Eight", "Nine", "Ten", 
      "Jack", "Queen", "King", "Ace" 
      }; 
     String[] suits = { "spades", "hearts", "diamonds", "clubs" }; 

      for (int a=0; a<=12; a++) 
      { 
       for (int b=0; b<=3; b++) 
       { 
        cards.add(new Card(cardNames[a], suits[b])); //I've noticed many people use this to add the card names and suits to the cards ArrayList, and it gives me an error of not being able to turn suits[b] into an integer, so I'm confused as to how it worked for others 

       } 
      } 
    return cards; 
    } 

позвонить makeDeck() с вашего основного метода.

public static void main(String[] args){ 
    ArrayList<Card> cards = makeDeck(); 

for(Card c : cards){ 
    System.out.println("You can print card member variables here"); 
} 

} 
+0

Этот код не компилируется. Конструктор ожидает 'int'. – christopher

0

Кажется, вы забыли return в конце вашего метода,

public static ArrayList<Card> makeDeck() 
{ 
    ArrayList<Card> cards = new ArrayList<Card>(); 
    String[] cardNames = 
     { 
     "Deuce", "Three", "Four", "Five", 
     "Six", "Seven", "Eight", "Nine", "Ten", 
     "Jack", "Queen", "King", "Ace" 
     }; 
    String[] suits = { "spades", "hearts", "diamonds", "clubs" }; 

     for (int a=0; a<=12; a++) 
     { 
      for (int b=0; b<=3; b++) 
      { 
       cards.add(new Card(cardNames[a], b)); // <-- if the second Card 
       //      parameter whould be an int. 
      } 
     } 
    return cards; 
} 

И вы должны называть makeDeck() не cards()

System.out.println(makeDeck()); 
Смежные вопросы