3

これはクラスの課題です。誰かに課題をやってもらうように頼んでいるわけではありませんが、ここに投稿する前に、私が受け取った 4 つのエラーと私のデッキがそうではないことについて助けを得ることを期待して、最善を尽くしました。なぜかシャッフルされる。

私の任務の指示:

この課題では、単純な戦争ゲームをプレイするプログラムを作成します。このゲームでは、各プレイヤーにフルデッキからカードが配られます。最も価値の高いカードを持っている人の勝ちです。配られたカードが同じ値の場合、引き分けとなり、どちらのプレイヤーも勝ちません。最も多くのラウンドを獲得したプレイヤーがゲームに勝利します。プレイヤーからの入力は必要ありません (あまり面白くありません!)。各プレイヤーに配られるカード、そのラウンドの結果、およびゲームの最終結果を印刷する必要があります。ユーザー入力を使用して、各ラウンド間の遅延を実装することができます。

私のカードクラス:

public class Card {

    private int cardNum;
    final static String[] suits = {"Spades", "Hearts", "Diamonds", "Clubs"};
    final static String[] ranks = {"2", "3","4","5","6","7","8", "9","10", "Jack", "Queen", "King", "Ace"};

    Card (int theCard) {
        setCardNum (theCard);
    }

    public void setCardNum (int theCard) {
        cardNum = (theCard >= 0 && theCard <= 51)? theCard: 0;
    }

    public int getCardNum() {
        return cardNum;
    }

    public String toString() {
        return ranks[cardNum%13] + " of " + suits[cardNum/13];
    }

    public String getSuit() {
        return suits[cardNum/13];
    }

    public String getRank() {
        return ranks[cardNum%13];
    }

    public int getValue() {
        return cardNum%13;
    } 
}

私のデッキクラス(シャッフルエラーがある場所):

public class Deck {

    private Card[] deck = new Card[52];
    private int topCard;

    Deck() {

        topCard = 0;

        for (int i = 0; i < deck.length; i++)
            deck[i] = new Card(i);

    }

    public void shuffle() {

        topCard = 0;

        for (int i = 0; i < 1000; i++) {
            int j = (int)(Math.random()*52);
            int k = (int)(Math.random()*52);
            Card tmpCard = deck[j];
            deck[j] = deck[k];
            deck[k] = tmpCard;
        } 
   }

    public Card dealCard() {
        Card theCard;
        if (topCard < deck.length) {
            theCard = deck[topCard];
            topCard++;
        }
        else
            theCard = null;

        return theCard;
    }
}

私の戦争ゲームのメイン プログラム:

import java.util.Scanner;

public class WarGame {

    public static void main(String[] args) {

        Card[][] hands = new Card[2][1];
        Deck myDeck = new Deck();

        for (int i = 0; i < 53; i++) {
            System.out.printf("\n Round %s of The War \n", i);

            for (int c = 0; c < 1; c++)
                for (int player = 0; player < hands.length; player++)
                    hands[player][c] = myDeck.dealCard();

            for (int player = 0; player < hands.length; player++) {
                System.out.printf("Player %d: ", player);
                printHand(hands[player]);

                int player1;
                int player2;

                if (player1.getValue() > player2.getValue())
                    System.out.println("Player One Wins The War");
                else if (player2.getValue() > player1.getValue())
                    System.out.println("Player Two Wins The War");
                else
                    System.out.println("The War Is A Tie");

            } 
        }
    }

    public static void printHand(Card[] hand) {

        for (int card = 0; card < hand.length; card++)
            System.out.printf("%s", hand[card].toString());

        System.out.println();

    } 
}

私のエラーは次のとおりです。

----jGRASP exec: javac -g WarGame.java

WarGame.java:31: error: int cannot be dereferenced
if (player1.getValue() > player2.getValue())
       ^
WarGame.java:31: error: int cannot be dereferenced
if (player1.getValue() > player2.getValue())
                            ^
WarGame.java:35: error: int cannot be dereferenced
else if (player2.getValue() > player1.getValue())
            ^
WarGame.java:35: error: int cannot be dereferenced
else if (player2.getValue() > player1.getValue())
                                 ^
4 errors

----jGRASP wedge2: exit code for process is 1.
----jGRASP: operation complete.

提供できるヘルプに感謝します。

player1 と player2 は、各プレイヤーが各ラウンドに与えられるカードを参照します

4

5 に答える 5

2

player1 と player2 はintあり、Integer (Java クラス) ではありません。つまり、それらはオブジェクトではなく、メソッドを持っていません。「Sam I Am」が言ったように、それらを直接比較できます。

それらを Integers としてキャストすることもできます:

if( (new Integer(player1)).compareTo(new Integer(player2)) > 0 ) 

ただし、実行している比較には整数メソッドは必要ないため、これはほとんど役に立ちません。

だからただ使う:

if (player1 > player2)

このトピックを読んで、整数のオートボクシングについて詳しく知ることができます。

于 2013-03-11T18:26:21.867 に答える
0

の Card オブジェクトの値を取得する必要がありますhands。現在、実際にはplayer1とに何も割り当てていませんplayer2.getValue()カードの値を取得するには、実際のオブジェクトを呼び出す必要があります。int player1 = hands[0][0].getValue();

main関数がどのように見えるかを示すために関数を更新し、後で役立ついくつかの変更を加えました。

public static void main(String[] args) {

    Card[][] hands = new Card[2][1];
    Deck myDeck = new Deck();

    //reduced this to 26 iterations because two cards are dealt each iteration
    for (int i = 0; i < 26; i++) {
        System.out.printf("\n Round %s of The War \n", i);

        //You really don't need to loop just once here...
        //Simply assign the card to hands[player][0] since that's the only option
        //for (int c = 0; c < 1; c++)
            for (int player = 0; player < hands.length; player++)
                hands[player][0] = myDeck.dealCard();

        for (int player = 0; player < hands.length; player++) {
            System.out.printf("Player %d: ", player);
            printHand(hands[player]);
        }

        int player1 = hands[0][0].getValue(); //get the value from the Card object
        int player2 = hands[1][0].getValue();

        if (player1 > player2)
            System.out.println("Player One Wins The War");
        else if (player2 > player1)
            System.out.println("Player Two Wins The War");
        else
            System.out.println("The War Is A Tie");

    }
}
于 2013-03-11T19:25:00.097 に答える
0

私は半分推測していますが、私はあなたがあなたの電話をかける必要はないとgetValue()思いintます

みたいな発言

if (player1 > player2)

と の両方が intであると仮定すると、完全に問題player1ありませんplayer2

于 2013-03-11T17:49:10.327 に答える
0

シャッフル メソッドの場合、次のコードを使用できます。

public void shuffle()
{
    Collections.shuffle(deck);
}
于 2018-07-30T23:11:45.057 に答える