-1

どうか、助けていただければ幸いです。これは単純な問題であると確信しています。

私は大学生で、Javaを初めて使用し、ラボコースの作業を試みています。

要件は非常に単純なポーカープログラムであり、次のことを行うだけです。指定された順序で52枚のカードのデッキを生成する(すでに機能している)プレーヤーの数とプレーヤー名を読み取る(すでに機能している)各(2)プレーヤーに5枚のカードを配るデッキの上からディーラー(機能しているかどうかわからない)次に、次の出力を介してカードを表示します。

プレイヤー数:2 プレイヤー1:ホーマー プレイヤー2:マージ

ホーマーはAH4H7H10HKHマージは2H5H8HJHADディーラーは3H6H9HQH2Dを持っています


いくつかのクラスがあります-ディーラー、プレーヤー、デッキ、ハンド、カード

今私が得ている出力は次のとおりです。

プレイヤー数:2 プレイヤー1:ホーマー プレイヤー2:マージ

ホーマーはKHKHKHKHKHマージはADADADADADディーラーは2D2D2D2D2Dを持っています


Dealerクラスに関連するコード:

public class Dealer {
    public static void main(String[] args)
    {   new Dealer();  }

    private Deck deck = new Deck();
    private Hand hand = new Hand();
    public ArrayList<Player> players = new ArrayList<Player>();

    ....

    private void deal()
    {
        for(int i = 0; i < 5; i ++) {
            for (Player player : players)
                player.add(next());
            add(next());  
        }
    }    //  deal five cards to each player and the dealer
         //  in the stated order

    private void add(Card card)
    {   hand.add(card);    }

    private Card next()
    {   return deck.next(); }

    private void show()
    {   
        for (Player player : players)
            System.out.println(player.getName() + " has " + player.showHand());
        System.out.println("Dealer has " + hand.toString());
    }
}

Playerクラスの関連コードは次のとおりです。

public class Player{
    private String name;
    private int number;
    private Hand hand = new Hand();
    ....
    public void add(Card card)
    {   hand.add(card); }

    public String showHand()
    {
        String show = "" + hand.toString();
        return show;
    }

Handクラスの関連コードは次のとおりです。

public class Hand {
    private Card[] cards = new Card[5];
    ....
    public void add(Card card)
    {
        for (int i = 0; i < cards.length; i++)
            cards[i] = new Card(card.valueReturn(), card.suitReturn());
    }

    public String toString()
    {
        String display = "";
        display = cards[0].toString() + cards[1].toString() + cards[2].toString() + cards[3].toString() + cards[4].toString();
        return display;
    }
}

Deckクラスの関連コードは次のとおりです。

public class Deck{
    private Card[] cards = new Card[52];
    private int i = 0, deck = 0;
    private char[] suits = {'H', 'D', 'C', 'S'};

    public Deck()
    {
        for (int suit = 0; suit < 4; suit++){
            for(int value = 1; value <= 13; value++){
                 cards[deck++] = new Card(value, suits[suit]);
            } 
        }        
    }  // create the cards in the stated order and add them to the deck

    //  This function works by side effect
    //  It uses the standard "next" pattern you will see next week
    public Card next()
    {   return cards[i++];    }
}

そして最後に、 Cardクラスの関連コードを示します。

public class Card{

    private int cardValue;
    private char suit;

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

    public String valueDisplay()
    {
        switch (cardValue)
        {
            case 1: return "A";
            case 11: return "J";
            case 12: return "Q";
            case 13: return "K";
            default: return "" + cardValue;
        }
    }

    public int valueReturn()
    {
        this.cardValue = cardValue;
        return cardValue;
    }

    public char suitReturn()
    {
        this.suit = suit;
        return suit;
    }

    public String toString()
    {
        return valueDisplay() + suit + " ";
    }
}
4

1 に答える 1

2

Hand.add()

for (int i = 0; i < cards.length; i++)
   cards[i] = new Card(card.valueReturn(), card.suitReturn());
}

まったく同じ値の5枚の新しいカードを作成しています。

(醜いが迅速な修正)のようなものを期待するでしょう:

for (int i = 0; i < cards.length; i++)
   if (cards[i] == null) {
     cards[i] = card;
     return;
   } 
}

さらに、これらの状況では、デバッガーの使用方法を学び、システムのステータスを段階的に監視することを学ぶと非常に役立ちます。

于 2012-08-22T13:02:11.967 に答える