我即将结束我的计划,我遇到了一个我不知道如何修复的障碍。
我正在尝试比较两张牌的等级值,因此我使用一种方法来获取刚从队列中删除的牌的等级。但是,我无法将卡转换为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
}
}
答案 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
字面意思是它所说的。 Card
和int
不可互换,因此在进行方法调用时,不能使用其他代替对方。