【问题标题】:What is wrong with the parameters of this method/Why am I getting this error?此方法的参数有什么问题/为什么会出现此错误?
【发布时间】:2015-06-29 05:00:21
【问题描述】:

我已经包含了我在这个问题中写的三个课程。一个是 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对象的arrayList:

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

在 main 方法中,我创建了一个名为“deck”的 Card 对象的 arrayList。 loadDeck() 方法应该采用一个空的 arrayList(用于 Card 对象)作为参数,并使用复制 52 张扑克牌的标准牌组的 Card 对象加载它。我在 main 方法类中遇到了一个我不理解的错误,尽管我认为它与 loadDeck() 方法的参数有关。有什么建议吗?

【问题讨论】:

  • 错误信息是什么?
  • loadDeck()Deck 上的一个方法,你没有Deck,你有一个ArrayList&lt;Card&gt;
  • 错误信息显示“找不到符号,符号:methodLoadDeck(ArrayList),位置:ArrayList 类型的变量卡组”

标签: java methods arraylist parameters playing-cards


【解决方案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;
}

}

【讨论】:

  • 谢谢!在您看来,将甲板加载到 Deck 类的构造函数中而不是方法中是否有意义?所以当我创建一个 Deck 对象时,它会自动成为一个包含 52 个 Card 对象的 arrayList。这是可能的还是有意义的?
  • @Stephanie 是的,这可能是更好的方法。您可以保留loadDeck() 方法,以防您想在创建后重新初始化卡组。只需在构造函数中调用loadDeck() 方法...
  • @Stephanie 也许将甲板类的ArrayList 部分设置为private ArrayList&lt;Card&gt; deck = new ArrayList&lt;Card&gt;(); 作为全局变量...我将发布一个示例...
猜你喜欢
  • 1970-01-01
  • 2021-08-04
  • 1970-01-01
  • 1970-01-01
  • 2021-03-29
  • 2022-01-04
  • 2018-12-06
  • 1970-01-01
  • 2022-06-19
相关资源
最近更新 更多