Что не так с параметрами этого метода/Почему я получаю эту ошибку?

Я включил три класса, которые я написал в этом вопросе. Один из них — это класс Card, представляющий игральную карту:

public class Card 
{
    int theRank, theSuit, theCard;

    public Card(int suit, int rank)
    { 
     theRank = rank;
     theSuit = suit;
    }

    public String getRank()
    {
     String rankString = "";

     switch (theRank)
     {
         case 1:
             rankString = "Ace";
         case 2: 
             rankString = "2";
         case 3:
             rankString = "3";
         case 4:
             rankString = "4";
         case 5:
             rankString = "5";
         case 6:
             rankString = "6";
         case 7:
             rankString = "7";
         case 8:
             rankString = "8";
         case 9:
             rankString = "9";
         case 10:
             rankString = "10";
         case 11:
             rankString = "Jack";
         case 12:
             rankString = "Queen";
         case 13:
             rankString = "King";
      }

      return rankString;
    }

    public String getSuit()
    {
     String suitString = "";

     switch(theSuit)
     {
         case 1:
             suitString = "Diamonds";
         case 2:
             suitString = "Hearts";
         case 3:
             suitString = "Clubs";
         case 4:
             suitString = "Spades";
     }

     return suitString;
  }
}

Другой — это класс Deck, который представляет массив объектов Card:

public class Deck 
{

    public ArrayList<Card> loadDeck(ArrayList<Card> deck)
    {
     for (int suit = 1; suit <= 4; suit++)
     {
      for (int rank = 1; rank <= 13; rank++)
      {
       deck.add(new Card(suit, rank));
      }
     }

    return deck;
 }

 public void shuffleDeck(ArrayList<Card> deck)
 {
    Card temp;
    int index;
    Random rand = new Random();
    for (int i = deck.size() - 1; i > 0; i--)
    {
     index = rand.nextInt(i + 1);
     temp = deck.get(index);
     deck.add(index, deck.get(i));
     temp = deck.get(i);
    }

 }

public ArrayList dealHand(ArrayList<Card> deck)
{
    Random rand = new Random();
    ArrayList<Card> hand = new ArrayList<Card>(8);

    for (int i = 0; i <= 6; i++)
    {
     int suit = rand.nextInt(3);
     int rank = rand.nextInt(51);
     Card temp = new Card(suit, rank);
     hand.add(i, temp);
     deck.remove(temp);


    }

    return hand;
}

public void printHand(ArrayList<Card> hand)
{
    for (int i = 0; i <= 6; i++)
    {
     Card temp = hand.get(0);
     System.out.println(temp.getRank() + " of " + temp.getSuit());

    }
}

}

Затем у меня есть класс GoFish, который содержит основной метод:

import java.util.ArrayList;

public class GoFish 
{

    public static void main(String[] args) 
    {
        ArrayList<Card> deck = new ArrayList<Card>();
        deck.loadDeck(deck);
    }
}

В основном методе я создаю массив объектов Card с именем «колода». Предполагается, что метод loadDeck() принимает в качестве параметра пустой массив arrayList (предназначенный для объектов Card) и загружает в него объекты Card, которые копируют стандартную колоду из 52 игральных карт. Я получаю сообщение об ошибке в классе основного метода, которую я не понимаю, хотя я думаю, что это как-то связано с параметрами метода loadDeck(). Какие-либо предложения?


person Stephanie    schedule 21.04.2015    source источник
comment
Что такое сообщение об ошибке?   -  person brso05    schedule 21.04.2015
comment
loadDeck() — это метод для Deck, у вас нет Deck, у вас есть ArrayList<Card>.   -  person azurefrog    schedule 21.04.2015
comment
в сообщении об ошибке говорится, что не удается найти символ, символ: методLoadDeck(ArrayList‹Card›), местоположение: переменная колода типа ArrayList‹Card›   -  person Stephanie    schedule 22.04.2015


Ответы (1)


ArrayList не имеет метода loadDeck().

public static void main(String[] args) 
{
    ArrayList<Card> deck = new ArrayList<Card>();
    deck.loadDeck(deck);
}

Вы хотите:

public static void main(String[] args) 
{
    Deck testDeck = new Deck();
    ArrayList<Card> deck = new ArrayList<Card>();
    deck = testDeck.loadDeck(deck);
}

***************ОБНОВЛЕНИЕ Возможно, вы хотите что-то подобное?***************************

public class Deck 
{
    private ArrayList<Card> deck;

    public Deck()
    {
        deck = new ArrayList<Card>();
        loadDeck();
    }

    public void loadDeck()
    {
     for (int suit = 1; suit <= 4; suit++)
     {
      for (int rank = 1; rank <= 13; rank++)
      {
       deck.add(new Card(suit, rank));
      }
     }

    return deck;
 }

 public void shuffleDeck(ArrayList<Card> deck)
 {
    Card temp;
    int index;
    Random rand = new Random();
    for (int i = deck.size() - 1; i > 0; i--)
    {
     index = rand.nextInt(i + 1);
     temp = deck.get(index);
     deck.add(index, deck.get(i));
     temp = deck.get(i);
    }

 }

public ArrayList<Card> dealHand()
{
    Random rand = new Random();
    ArrayList<Card> hand = new ArrayList<Card>(8);

    for (int i = 0; i <= 6; i++)
    {
     int suit = rand.nextInt(3);
     int rank = rand.nextInt(51);
     Card temp = new Card(suit, rank);
     hand.add(i, temp);
     deck.remove(temp);


    }

    return hand;
}

public void printHand(ArrayList<Card> hand)
{
    for (int i = 0; i <= 6; i++)
    {
     Card temp = hand.get(0);
     System.out.println(temp.getRank() + " of " + temp.getSuit());

    }
}

public ArrayList<Card> getDeck()
{
    return this.deck;
}

}
person brso05    schedule 21.04.2015
comment
Спасибо! На ваш взгляд, имеет ли смысл загружать колоду в конструктор класса Deck, а не в метод? Так что, когда я создаю объект Deck, он автоматически будет массивом из 52 объектов Card. Возможно ли это или есть ли смысл? - person Stephanie; 22.04.2015
comment
@ Стефани, да, это, вероятно, был бы лучший подход. Вы можете оставить метод loadDeck(), если хотите повторно инициализировать колоду после того, как она уже была создана. Просто вызовите метод loadDeck() в своем конструкторе... - person brso05; 22.04.2015
comment
@Stephanie Может быть, сделать ArrayList частью класса колоды private ArrayList<Card> deck = new ArrayList<Card>(); в качестве глобальной переменной ... Я опубликую пример ... - person brso05; 22.04.2015