我的测试播放器类在二十一点Java有什么问题
问题描述:
我试图正确地测试我的播放器类,我已经差不多完成了它,但我遇到了与我的p1.setPlayerHand方法有关的问题。这是下面的代码,我用我的播放器类:我的测试播放器类在二十一点Java有什么问题
Player类:
package model;
public class Player
{
private String PlayerName;
private Hand PlayerHand;
private boolean Dealer;
public Player(String name)
{
PlayerName = name;
PlayerHand = new Hand();
Dealer = false;
}
public void setName (String name)
{
this.PlayerName = name;
}
public String getName()
{
return PlayerName;
}
public void setDealer (Boolean dealer)
{
this.Dealer = dealer;
}
public boolean getDealer()
{
return Dealer;
}
public void setPlayerHand (Hand hand)
{
this.PlayerHand = hand;
}
public void getHand()
{
PlayerHand.displayCardsinHand();
}
public static void main (String [] args)
{
Player p1 = new Player("player1");
Hand h = new Hand();
//System.out.println(p1);
p1.setName("BARRY");
System.out.println(p1.getName());
p1.setDealer(false);
System.out.println(p1.getDealer());
//this is the error that is preventing my program to run
p1.setPlayerHand(h.addCard(new Card(Suit.CLUBS, CardRank.ACE)));
p1.getHand();
}
}
以下错误我收到(测试玩家级后)是这样的:
异常在线程“main”java.lang.Error:未解决的编译问题:类型Player中的setPlayerHand(Hand)方法不适用于参数(void) at model.Player.main(Player.java:57)
这是手工类的下方(即链接到播放器类):
手工类:
package model;
import java.util.Vector;
import java.util.Random;
public class Hand
{
private Vector<Card> hand;
public Hand()
{
hand = new Vector<Card>();
}
public void addCard(Card c)
{
hand.add(c);
}
public void displayCardsinHand()
{
for (int card = 0; card < hand.size(); card++)
{
System.out.println(hand.elementAt(card));
}
}
public int getCardsinHand()
{
return hand.size();
}
public Card getCard(int position)
{
if(position >= 0 && position < hand.size())
return (Card)hand.elementAt(position);
else
return null;
}
public int getScore()
{
int value = 0;
boolean ace = false;
for (int i = 0; i < hand.size(); i++)
{
Card c;
c = getCard(i);
value = value + c.getRankValue();
if(c.getRankValue() == 1)
{
ace = true;
}
}
if(ace == true && value + 10 <= 21)
{
value = value + 10;
}
return value;
}
public static void main (String [] args)
{
Hand h = new Hand();
System.out.println(h);
h.displayCardsinHand();
System.out.println(h.getCardsinHand());
h.addCard(new Card(Suit.HEARTS, CardRank.ACE));
System.out.println(h.getCardsinHand());
h.addCard(new Card(Suit.SPADES, CardRank.JACK));
System.out.println(h.getCardsinHand());
h.addCard(new Card(Suit.DIAMONDS, CardRank.QUEEN));
System.out.println(h.getCardsinHand());
h.addCard(new Card(Suit.CLUBS, CardRank.KING));
System.out.println(h.getCardsinHand());
System.out.println(h.getCardsinHand());
h.displayCardsinHand();
h.getCard(1);
System.out.println(h.getScore());
}
}
我试图修改p1.setPlayerHand测试了无数次。我很感激任何关于如何解决此问题的建议和提示,谢谢。 如果我的代码对于这篇文章来说太长,那么我会很乐意接受有关我应该怎么做才能将其缩短的建议(以备将来参考)。 如果任何人在这里需要看到我写的任何其他类(这可能会帮助他们帮助我解决此错误),那么请在此通知我,谢谢。
答
方法addCard
不返回任何东西(void)
。所以你不能将这个方法的结果传递给setPlayerHand(Hand)
。这就是你正在做的。
答
代码应编译并运行,如果你改变
p1.setPlayerHand(h.addCard(new Card(Suit.CLUBS, CardRank.ACE)));
到
h.addCard(new Card(Suit.CLUBS, CardRank.ACE));
p1.setPlayerHand(h);
这是因为setPlayerHand
方法需要传递Hand
类型的对象,但addCard
方法没有按” t返回任何东西(它被声明为void
)。
此外,运行时错误告诉您在编译时检测到错误。编译代码时应该看到一条错误消息。 – 2012-04-18 05:32:18