2012-04-18 25 views
0

我试图正确地测试我的播放器类,我已经差不多完成了它,但我遇到了与我的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测试了无数次。我很感激任何关于如何解决此问题的建议和提示,谢谢。 如果我的代码对于这篇文章来说太长,那么我会很乐意接受有关我应该怎么做才能将其缩短的建议(以备将来参考)。 如果任何人在这里需要看到我写的任何其他类(这可能会帮助他们帮助我解决此错误),那么请在此通知我,谢谢。

回答

2

方法addCard不返回任何东西(void)。所以你不能将这个方法的结果传递给setPlayerHand(Hand)。这就是你正在做的。

+1

此外,运行时错误告诉您在编译时检测到错误。编译代码时应该看到一条错误消息。 – 2012-04-18 05:32:18

1

代码应编译并运行,如果你改变

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)。