不兼容的类型:卡不能转换为int

时间:2014-03-15 16:37:06

标签: java object incompatibility

我即将结束我的计划,我遇到了一个我不知道如何修复的障碍。

我正在尝试比较两张牌的等级值,因此我使用一种方法来获取刚从队列中删除的牌的等级。但是,我无法将卡转换为int值。我有点困惑,因为Card只是两个int值,rank和suit,然后通过cRank / cSuit数组转换为字符串。

这是导致错误的特定代码

x = Card.getRank(PlayerOne.remove()); //Incompatible types: Card cannot be converted to int

这是代码,如果你看到任何让你想哭的东西,只需指出它。

卡类

package randomdeck;
import java.util.ArrayList;
import java.util.Stack;

public class Card 
{
int suit;
int rank;

public String[] cRank = new String[] { "Ace", "2",
"3", "4", "5", "6", "7", "8", "9", "10", "Jack",
"Queen", "King" };

public String[] cSuit = new String[] { "Hearts",
"Spades", "Diamonds", "Clubs" };


public Card(int rank, int suit)
{
    this.suit=suit;
    this.rank=rank;
}

int getRank(int rank)
{
    return rank;
}

int getSuit(int suit)
{
    return suit;
}

void setSuit()
{
    suit=Card.this.suit;
}

void setRank()
{
    rank=Card.this.rank;
}

 public String toString()
{
    return cRank[rank] + " of " + cSuit[suit];
}
}

甲板等级

public class Deck 
{
Stack<Card> Deck = new Stack<Card>();

 public Deck()
 {

   for(int rank=0; rank<13; rank++)
   {
       for(int suit=0; suit<4; suit++)
       {
           Deck.push(new Card(rank,suit));

       }
   }
}

public void peekDeck()
{
   System.out.println(Deck); 
}

public void printDeckSize()
{
   System.out.println("DECK " + Deck.size());
}

public int getDeckSize()
{
   Deck.size();
   return Deck.size();

}

public Stack popDeck()
{
   Deck.pop();
   return Deck;
}

public Stack getDeck()
{
   return Deck;
}

public void shuffleDeck()
{
   long seed = System.nanoTime();
   //Collections.shuffle(Deck, new Random(seed));  //MichealScot.no/gif
   ArrayList<Card> temp = new ArrayList<Card>();

   while(Deck.size()!=0)
   {
       temp.add(Deck.pop());
   }

   Collections.shuffle(temp, new Random(seed));
   System.out.println(temp);

   Deck.addAll(temp);
   temp.clear();
   System.out.println(temp);


}

战争游戏类(CLASS WITH ERROR)

public class Wargame extends Deck
{
Queue<Card> PlayerOne = new LinkedList<Card>(); 
Queue<Card> PlayerTwo = new LinkedList<Card>(); //Stacks that will be used to hold players winnings/starting deck

public Wargame()
{

}

void splitDeck()
{

    while(PlayerOne.size()<getDeckSize())
    {   
        PlayerOne.add(Deck.pop());
    }
    //System.out.println(PlayerOne);

    int x = Deck.size();

    for(int i=0; i<x; i++)
    {
        PlayerTwo.add(Deck.pop());
    }
    //System.out.println(PlayerTwo);

}


public void Game()
{

    shuffleDeck();
    splitDeck();
    ArrayList Temp = new ArrayList();

    while(PlayerOne.size()!=0 || PlayerTwo.size()!=0)
    {
        int x=0;
        int y=0;
        //Temp.add(PlayerOne.remove());
        //Temp.get(0);

        x = Card.getRank(PlayerOne.remove());
        y = Card.getRank(PlayerTwo.remove());   //Incompatable types, Card cannont be     converted to int

    }
}

2 个答案:

答案 0 :(得分:1)

PlayerOne.remove()会返回Card个对象。 Card.getRank()方法需要int

更糟糕的是,Card.getRank()是一个实例方法(不是静态的),但您可以将其称为静态(如Card.getRank()而不是someCardObject.getRank() {{1}})。

确保您对static vs. instance methods的理解完全一致。然后再次查看代码,记住您的方法作为参数的类型以及方法返回的类型。然后,您应该能够完成并修复您的代码。

答案 1 :(得分:0)

错误信息非常明确:

PlayerOne.remove()

此方法返回Card类型的对象,但是您尝试将此Object传递给getRank方法。 getRank方法的签名指定它采用类型为int的一个参数。编译器尝试检查它们是否兼容,它们不兼容,因此编译时错误,以及错误消息:

  

不兼容的类型:卡无法转换为int

字面意思是它所说的。 Cardint不可互换,因此在进行方法调用时,不能使用其他代替对方。