-2

我早些时候发布了这个,我的大部分问题都得到了回答,但我的代码中只有最后一个错误。

所以基本上我正在用java制作一个黑杰克游戏。我有一个卡片类、一个套牌类和我的主类。我遇到的问题是我的主要问题。在我的套牌类中,我在 arraylist 中创建了 52 张卡片的套牌。然后我有一个方法 deal ,它将获取顶牌并将其添加到手牌数组列表中,这是用户手中的牌。一旦用户不想再继续,牌就会停止发牌。我的 main 的最后一部分获取手数组列表中的值并将它们相加并将它们与 21 进行比较,以查看用户是否超过了。我意识到我正在尝试在 int 总数中保存一个 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;
  }
}
4

3 回答 3

2
cannot convert from Card to int

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

于 2012-10-13T02:21:18.913 回答
1

你的Card类应该有一个方法叫做intValueorgetValue来获取卡片的整数值。然后在每张卡上调用它并将返回的数字相加。不过,处理软 A 会有点棘手。

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

int total;
for(Card card: hand)
{
   total += card.value();
}
于 2012-10-13T02:22:24.337 回答
0

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

于 2012-10-13T02:38:14.530 回答