0

プレーヤー クラスを適切にテストしようとしています。ほぼ完了しましたが、p1.setPlayerHandメソッドに問題があります。これは、プレーヤー クラスに使用した次のコードです。

プレイヤークラス:

 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();
}
  }

(Player クラスをテストした後に) 受け取った次のエラーは次のとおりです。

スレッド「メイン」の例外 java.lang.Error: 未解決のコンパイルの問題: 型 Player のメソッド setPlayerHand(Hand) は、model.Player.main(Player.java:57) の引数 (void) には適用されません

これは下の Hand クラスです (これは Player クラスにリンクされています):

手のクラス:

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テストを何度も変更しようとしました。この問題を解決する方法についてアドバイスやヒントをいただければ幸いです。ありがとうございます。私のコードがこの投稿には長すぎる場合は、コードを短くするために何をすべきかについてのアドバイスを喜んで受け入れます (将来の参考のために)。ここで誰かが私が書いた他のクラスを表示する必要がある場合 (このエラーを解決するのに役立つ可能性があります)、ここで通知してください。

4

2 に答える 2

2

メソッドaddCardは何も返しません(void)。したがって、このメソッドの結果を に渡すことはできませんsetPlayerHand(Hand)。それがあなたがしていることです。

于 2012-04-18T05:16:29.137 に答える
1

変更すると、コードをコンパイルして実行する必要があります

p1.setPlayerHand(h.addCard(new Card(Suit.CLUBS, CardRank.ACE)));

h.addCard(new Card(Suit.CLUBS, CardRank.ACE));
p1.setPlayerHand(h);

これは、setPlayerHandメソッドに type のオブジェクトを渡す必要があるHandのに、addCardメソッドが何も返さないためです ( として宣言されていますvoid)。

于 2012-05-01T13:17:41.747 に答える