在java中遇到黑杰克卡游戏的问题

时间:2012-10-13 02:18:44

标签: java

我之前发布了这个问题并且我的大部分问题都得到了解答,但我的代码中只有最后一个错误。

所以基本上我在java中制作黑杰克游戏。我有一个卡片课,一个甲板课和我的主要课程。我遇到的问题是我的主要问题。在我的甲板课上,我在一个arraylist中创建了一副52张牌。然后,我有一个方法处理,将采取顶部卡并将其添加到手arraylist,这是用户手中的卡。一旦用户不想再继续,则卡片停止被处理。我的主要的最后一部分采用手arraylist中的值并将它们相加并将它们与21进行比较以查看用户是否结束了。我意识到我试图在int total中保存一个Card值但是我会用什么来保存arraylist中的值以便我可以比较它们?任何帮助/建议或建议表示赞赏

我对此代码的错误是:

 1 error found:
File: E:\Documents\Java Files\Assignment 3\CardGameTester.java  [line: 33]
Error: Type mismatch: cannot convert from Card to int

我的主要部分是有问题的:

int total;

for(int index = 0; index <= hand.size(); index++)
{
  total = hand.get(index);
}

System.out.println("Your total value for you cards are: " + total);

if(total == 21){
  System.out.println("Congrats, you have won for not going over 21");
}
else
  {
    System.out.println("Sorry, you lose for going over 21");
}

对于任何好奇的人来说,这是我的卡片和甲板课程:

public class Card
{
  private int rankValue, suitValue;
  private String ranks[] = {"Hearts", "Clubs", "Spades", "Diamonds"};
  private String suits[] = {"Ace", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"};

  public Card(int rank, int suit)
  {
    rankValue = rank;
    suitValue = suit;
  }

  public String convertToString(int rank){
    return ranks[rank];
  }

  public void setRank(int rank){
    rankValue = rank;
  }

  public void setSuit(int suit){
    suitValue = suit;
  }

  public int getRank(){
    return rankValue;
  }

  public int getSuit(){
    return suitValue;
  }

  public String toString(){
    String name = ranks[rankValue] + " of " + suits[suitValue];
    return name;
  }
}

甲板课程:

import java.util.ArrayList;
import java.util.Collections;

public class Deck
{
  private ArrayList<Card> cards = new ArrayList<Card>();

  public Deck()
  {
    for(int a = 1; a <= 4; a++)
    {
      for(int b = 1; b <= 13; b++)
      {
        Card c = new Card(a,b);
        cards.add(c);
      }
    }
    shuffle();
  }

  public void shuffle(){
    Collections.shuffle(cards);
  }

  public Card deal(){
    int index = 0;
    Card c = cards.remove(index);
    index++;
    return c;
  }
}

3 个答案:

答案 0 :(得分:2)

cannot convert from Card to int

卡片类可能有一个由int value访问的getValue()字段。

答案 1 :(得分:1)

您的Card类应该有一个名为intValuegetValue的方法来获取卡的整数值。然后在每张卡上调用它并添加返回的号码。处理柔软的ace会有点棘手。

另外,使用foreach而不是手动索引。

int total;
for(Card card: hand)
{
   total += card.value();
}

答案 2 :(得分:0)

消息告诉你卡片不是“int”,这当然是完全正确的。我建议您阅读有关面向对象编程的内容。基本思想是类包含属性,这些属性可以是简单类型,如int或其他类的其他实例。不同的类具有不同的操作和属性集。编译器知道卡具有某些操作,并且该参考仅允许卡或看起来像卡的东西。我不想进一步了解细节,因为互联网上有很多很棒的讨论和教程,很容易找到。