3

This is a class assignment, I am not asking for anyone to DO the assignment for me but rather I have attempted to my best ability before posting on here in hopes of receiving some help on my 4 errors I am receiving and that my deck is not being shuffled for some reason.

My Assignment Directions:

For this assignment, you will create a program that plays a simple game of War. In this game, each player is dealt a card from the full deck. Whoever has the card with the highest value wins. If the cards that are dealt have the same value, then it is a tie and neither player wins. The player that wins the most rounds wins the game. There is no input required from the players (not very interesting!). You should print the cards that each player is dealt and the result of that round and the final result of the game. You may want to use user input to implement a delay between each round.

My Card Class:

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

My Deck Class(where I have a shuffling error):

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

My War Game Main Program:

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

    } 
}

My Errors Are As Follows:

----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.

Thank You So Much for any Help that can be offered.

player1 and player2 refer to the cards each player is given each round

user2157845
  • 47
  • 1
  • 1
  • 4
  • 1
    +1 for trying first..! – cowls Mar 11 '13 at 17:47
  • 3
    Remove the `.getValue()` from `player1` and `player2` in your main program. That will get rid of the errors that you currently have. But then you'll have problems with trying to compare uninitialized variables. What exactly are `player1` and `player2` supposed to be referring to? – jonhopkins Mar 11 '13 at 17:47
  • You should format the code with proper indentation to make it easier to read – cowls Mar 11 '13 at 17:48
  • If `player1` and `player2` are integers can you just compare them with the `<` sign? Why are you using `getValue()`? – Ian R. O'Brien Mar 11 '13 at 17:48
  • I see you've tagged your question for [tag:javascript]. But I have to ask, what does this question have to do with Javascript programming? – Hovercraft Full Of Eels Mar 11 '13 at 17:48
  • @HovercraftFullOfEels it doesn't I removed the js tag from the question. – Ryan Mar 11 '13 at 17:50
  • @IanO'Brien I am supposed to compare the cards given to each player during each round so i was attempting to give those cards the names player1 and player2 then compare them – user2157845 Mar 11 '13 at 19:08
  • @johnhopkins I was trying to give the card assigned each round to player one the name player1 and the card assigned to player two the name player2. So name the cards player1 and player2, compare them, display which player wins, then replace the cards names the next round and continue this for all 26 rounds – user2157845 Mar 11 '13 at 19:12

5 Answers5

2

player1 and player2 are ints and not Integers (which is a Java Class). That means they are not object and don't have methods on them. You can compare them directly as "Sam I Am" said.

You can also cast them as Integers :

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

But this is pretty useless since the comparison you are doing do not need any of the integer methods.

So just use :

if (player1 > player2)

You can read this topic to learn more about autoboxing of Integers.

Community
  • 1
  • 1
Hugo Dozois
  • 8,147
  • 12
  • 54
  • 58
1
// import needed classes and packages
import java.util.Scanner;
import java.text.NumberFormat;
import java.io.IOException;
import java.util.Locale;
import java.text.DecimalFormat;

public class Program2
{public static void main(String[] args) throws IOException
    {
    //Declare Variables
    //Creates the cards based on their suite
    Card heartCard;
    Card diamondCard;
    Card spadeCard;
    Card clubCard;
    int countingPlays = 0;


    Scanner keyboard = new Scanner(System.in); //Allows Input

    //creates the cardPile array called DeckOfCards
    CardPile deckOfCards = new CardPile();

    //Creates Player1's Card Pile
    CardPile player1Pile = new CardPile();

    //Creates Player2's Card Pile
    CardPile player2Pile = new CardPile();

    //Creates the cards to fill the array (1-14 of hearts/diamonds/spades/clubs).
    for(int i = 2; i < 15; i++)
    {
        char heart = '\u0003';
        char diamond ='\u0004';
        char spade = '\u0005';
        char club = '\u0006';

        deckOfCards.add(heartCard = new Card(heart, i));
        deckOfCards.add(diamondCard = new Card(diamond, i));
        deckOfCards.add(spadeCard = new Card(spade, i));
        deckOfCards.add(clubCard = new Card(club, i));
    }

    //prints out the deck of Cards
    System.out.println("Deck Of Cards: " + deckOfCards);

    //shuffles the cards
    deckOfCards.shuffle();

    //Prints out the deck of cards after they are shuffled
    System.out.println("Deck of Cards after shuffled: " + deckOfCards);

    //Checking the size of the Deck
    System.out.println("" + deckOfCards.size());

    //Takes the deckOfCards and splits them up into 2 piles for Player1 and Player2
    for(int i = 0; i < 26; i++)
    {
        player1Pile.add(deckOfCards.getTopCard());
        player2Pile.add(deckOfCards.getTopCard());
    }

    //Prints out the deck of Cards and then the player 1's pile and player 2's pile

    System.out.println("Player 1's Cards: " + player1Pile);
    System.out.println("Player 2's Cards: " + player2Pile);

    //checking the size of each players Pile


    //Prints the header for the game
    System.out.println("Lets have a war!!!");


    //Testing tricky spot where the getTopCard removes a the topcard
    /*
    Card removedTopCard = player1Pile.getTopCard();
    System.out.println("Getting player1Pile: " + removedTopCard);
    player1Pile.add(removedTopCard);
    System.out.println("Player1Pile is " + player1Pile);
    System.out.println("Player1Pile size is " +player1Pile.size());
    */

    //Starts the game of War
    try
    {   //do while the sizes of the player piles are greater than 0.
        do
        {
            //gets the top cards of each players Pile
            Card player1RemovedTopCard = player1Pile.getTopCard();
            Card player2RemovedTopCard = player2Pile.getTopCard();

            //Compares the 2 cards to test which is bigger. If player 1's card is smaller than player 2 is the winner
            if(player1RemovedTopCard.compareTo(player2RemovedTopCard) < player2RemovedTopCard.compareTo(player1RemovedTopCard))
            {
                System.out.println("Player 1: " + player1RemovedTopCard + " Player 2: " + player2RemovedTopCard);
                System.out.println("Player 2 is the Winner");
                player2Pile.add(player1RemovedTopCard);
                player2Pile.add(player2RemovedTopCard);
                System.out.println("Player 1 has: " + player1Pile.size() + " cards left.");
                System.out.println("Player 2 has:" + player2Pile.size() + " cards left.");
                System.out.println("\n");
                keyboard.nextLine();
            }
            //Compares the 2 cards to test which is bigger. If player 2's card is smaller than player 1 is the winner.
            else if(player1RemovedTopCard.compareTo(player2RemovedTopCard) > player2RemovedTopCard.compareTo(player1RemovedTopCard))
            {
                System.out.println("Player 1: " + player1RemovedTopCard + " Player 2: " + player2RemovedTopCard);
                System.out.println("Player 1 is the Winner");
                player1Pile.add(player1RemovedTopCard);
                player1Pile.add(player2RemovedTopCard);
                System.out.println("Player 1 has: " + player1Pile.size() + " cards left.");
                System.out.println("Player 2 has:" + player2Pile.size() + " cards left.");
                System.out.println("\n");
                keyboard.nextLine();
            }
            //Else it is a war
            else
            {
                System.out.println("Player 1: " + player1RemovedTopCard + " Player 2: " + player2RemovedTopCard);
                System.out.println("WAR!!!!!!!");
                //War if the player has only 4 cards left.
                if(player1Pile.size() == 1 || player2Pile.size() == 1)
                {
                    Card player1RemovedTopCard2 = player1Pile.getTopCard();

                    Card player2RemovedTopCard2 = player2Pile.getTopCard();
                    System.out.println("Player1's 2nd card is: " + player1RemovedTopCard2 + " Player2's 2nd card is: " + player2RemovedTopCard2);
                    if(player1RemovedTopCard2.compareTo(player2RemovedTopCard2) > player2RemovedTopCard2.compareTo(player1RemovedTopCard2))
                    {
                        System.out.println("Player 1 is the winner of the War! ");
                        player1Pile.add(player1RemovedTopCard);
                        player1Pile.add(player1RemovedTopCard2);
                        player1Pile.add(player2RemovedTopCard);
                        player1Pile.add(player2RemovedTopCard2);
                        System.out.println("Player 1 has: " + player1Pile.size() + " cards left.");
                        System.out.println("Player 2 has: " + player2Pile.size() + " cards left.");
                        System.out.println("\n");
                        keyboard.nextLine();
                    }
                    else if(player1RemovedTopCard2.compareTo(player2RemovedTopCard2) < player2RemovedTopCard2.compareTo(player1RemovedTopCard2))
                    {
                        System.out.println("Player 2 is the winner of the War! ");
                        player2Pile.add(player1RemovedTopCard);
                        player2Pile.add(player1RemovedTopCard2);
                        player2Pile.add(player2RemovedTopCard);
                        player2Pile.add(player2RemovedTopCard2);
                        System.out.println("Player 1 has: " + player1Pile.size() + " cards left.");
                        System.out.println("Player 2 has: " + player2Pile.size() + " cards left.");
                        System.out.println("\n");
                        keyboard.nextLine();
                    }
                    else
                    {
                        if(player2Pile.size() == 0)
                        {
                            player1Pile.add(player2RemovedTopCard2);
                            player1Pile.add(player2RemovedTopCard);
                            player1Pile.add(player1RemovedTopCard2);
                            player1Pile.add(player1RemovedTopCard);
                        }
                        else
                        {
                            player2Pile.add(player2RemovedTopCard2);
                            player2Pile.add(player2RemovedTopCard);
                            player2Pile.add(player1RemovedTopCard2);
                            player2Pile.add(player1RemovedTopCard);
                        }
                    }
                }
                //War if the player has only 2 cards left.
                else if(player1Pile.size() == 2 || player2Pile.size() == 2)
                {
                    Card player1RemovedTopCard2 = player1Pile.getTopCard();
                    Card player1RemovedTopCard3 = player1Pile.getTopCard();

                    Card player2RemovedTopCard2 = player2Pile.getTopCard();
                    Card player2RemovedTopCard3 = player2Pile.getTopCard();

                    do
                    {
                        System.out.println("Player1's 3rd card is: " + player1RemovedTopCard3 + " Player2's 3rd card is: " + player2RemovedTopCard3);
                        if(player1RemovedTopCard3.compareTo(player2RemovedTopCard3) > player2RemovedTopCard3.compareTo(player1RemovedTopCard3))
                        {
                            System.out.println("Player 1 is the winner of the War! ");
                            player1Pile.add(player1RemovedTopCard);
                            player1Pile.add(player1RemovedTopCard2);
                            player1Pile.add(player1RemovedTopCard3);
                            player1Pile.add(player2RemovedTopCard);
                            player1Pile.add(player2RemovedTopCard2);
                            player1Pile.add(player2RemovedTopCard3);
                            System.out.println("Player 1 has: " + player1Pile.size() + " cards left.");
                            System.out.println("Player 2 has: " + player2Pile.size() + " cards left.");
                            System.out.println("\n");
                            keyboard.nextLine();
                        }
                        else if(player1RemovedTopCard3.compareTo(player2RemovedTopCard3) < player2RemovedTopCard3.compareTo(player1RemovedTopCard3))
                        {
                            System.out.println("Player 2 is the winner of the War! ");
                            player2Pile.add(player1RemovedTopCard);
                            player2Pile.add(player1RemovedTopCard2);
                            player2Pile.add(player1RemovedTopCard3);
                            player2Pile.add(player2RemovedTopCard);
                            player2Pile.add(player2RemovedTopCard2);
                            player2Pile.add(player2RemovedTopCard3);
                            System.out.println("Player 1 has: " + player1Pile.size() + " cards left.");
                            System.out.println("Player 2 has: " + player2Pile.size() + " cards left.");
                            System.out.println("\n");
                            keyboard.nextLine();
                        }
                    //Continues the war if the top card at the end of the war are still equal
                    }while(player1RemovedTopCard3.compareTo(player2RemovedTopCard3) == player2RemovedTopCard3.compareTo(player1RemovedTopCard3));
                }
                //War if the player has only 3 cards left.
                else if(player1Pile.size() == 3 || player2Pile.size() == 3)
                {
                    Card player1RemovedTopCard2 = player1Pile.getTopCard();
                    Card player1RemovedTopCard3 = player1Pile.getTopCard();
                    Card player1RemovedTopCard4 = player1Pile.getTopCard();

                    Card player2RemovedTopCard2 = player2Pile.getTopCard();
                    Card player2RemovedTopCard3 = player2Pile.getTopCard();
                    Card player2RemovedTopCard4 = player2Pile.getTopCard();

                    do
                    {
                        System.out.println("Player1's fourth card is: " + player1RemovedTopCard4 + " Player2's fourth card is: " + player2RemovedTopCard4);
                        if(player1RemovedTopCard4.compareTo(player2RemovedTopCard4) > player2RemovedTopCard4.compareTo(player1RemovedTopCard4))
                        {
                            System.out.println("Player 1 is the winner of the War! ");
                            player1Pile.add(player1RemovedTopCard);
                            player1Pile.add(player1RemovedTopCard2);
                            player1Pile.add(player1RemovedTopCard3);
                            player1Pile.add(player1RemovedTopCard4);
                            player1Pile.add(player2RemovedTopCard);
                            player1Pile.add(player2RemovedTopCard2);
                            player1Pile.add(player2RemovedTopCard3);
                            player1Pile.add(player2RemovedTopCard4);
                            System.out.println("Player 1 has: " + player1Pile.size() + " cards left.");
                            System.out.println("Player 2 has: " + player2Pile.size() + " cards left.");
                            System.out.println("\n");
                            keyboard.nextLine();
                        }
                        else if(player1RemovedTopCard4.compareTo(player2RemovedTopCard4) < player2RemovedTopCard4.compareTo(player1RemovedTopCard4))
                        {
                            System.out.println("Player 2 is the winner of the War! ");
                            player2Pile.add(player1RemovedTopCard);
                            player2Pile.add(player1RemovedTopCard2);
                            player2Pile.add(player1RemovedTopCard3);
                            player2Pile.add(player1RemovedTopCard4);
                            player2Pile.add(player2RemovedTopCard);
                            player2Pile.add(player2RemovedTopCard2);
                            player2Pile.add(player2RemovedTopCard3);
                            player2Pile.add(player2RemovedTopCard4);
                            System.out.println("Player 1 has: " + player1Pile.size() + " cards left.");
                            System.out.println("Player 2 has: " + player2Pile.size() + " cards left.");
                            System.out.println("\n");
                            keyboard.nextLine();
                        }
                    //Continues the war if the top card at the end of the war are still equal
                    }while(player1RemovedTopCard4.compareTo(player2RemovedTopCard4) == player2RemovedTopCard4.compareTo(player1RemovedTopCard4));
                }
                //war if player has more than 4 cards
                else if(player1Pile.size() >= 4 || player2Pile.size() >= 4)
                {
                    Card player1RemovedTopCard2 = player1Pile.getTopCard();
                    Card player1RemovedTopCard3 = player1Pile.getTopCard();
                    Card player1RemovedTopCard4 = player1Pile.getTopCard();
                    Card player1RemovedTopCard5 = player1Pile.getTopCard();

                    Card player2RemovedTopCard2 = player2Pile.getTopCard();
                    Card player2RemovedTopCard3 = player2Pile.getTopCard();
                    Card player2RemovedTopCard4 = player2Pile.getTopCard();
                    Card player2RemovedTopCard5 = player2Pile.getTopCard();
                    do
                    {
                        System.out.println("Player1's 5th card is: " + player1RemovedTopCard5 + " Player2's 5th card is: " + player2RemovedTopCard5);
                        if(player1RemovedTopCard5.compareTo(player2RemovedTopCard5) > player2RemovedTopCard5.compareTo(player1RemovedTopCard5))
                        {
                            System.out.println("Player 1 is the winner of the War! ");
                            player1Pile.add(player1RemovedTopCard);
                            player1Pile.add(player1RemovedTopCard2);
                            player1Pile.add(player1RemovedTopCard3);
                            player1Pile.add(player1RemovedTopCard4);
                            player1Pile.add(player1RemovedTopCard5);
                            player1Pile.add(player2RemovedTopCard);
                            player1Pile.add(player2RemovedTopCard2);
                            player1Pile.add(player2RemovedTopCard3);
                            player1Pile.add(player2RemovedTopCard4);
                            player1Pile.add(player2RemovedTopCard5);
                            System.out.println("Player 1 has: " + player1Pile.size() + " cards left.");
                            System.out.println("Player 2 has: " + player2Pile.size() + " cards left.");
                            System.out.println("\n");
                            keyboard.nextLine();
                        }
                        else if(player1RemovedTopCard5.compareTo(player2RemovedTopCard5) < player2RemovedTopCard5.compareTo(player1RemovedTopCard5))
                        {
                            System.out.println("Player 2 is the winner of the War! ");
                            player2Pile.add(player1RemovedTopCard);
                            player2Pile.add(player1RemovedTopCard2);
                            player2Pile.add(player1RemovedTopCard3);
                            player2Pile.add(player1RemovedTopCard4);
                            player2Pile.add(player1RemovedTopCard5);
                            player2Pile.add(player2RemovedTopCard);
                            player2Pile.add(player2RemovedTopCard2);
                            player2Pile.add(player2RemovedTopCard3);
                            player2Pile.add(player2RemovedTopCard4);
                            player2Pile.add(player1RemovedTopCard5);
                            System.out.println("Player 1 has: " + player1Pile.size() + " cards left.");
                            System.out.println("Player 2 has: " + player2Pile.size() + " cards left.");
                            System.out.println("\n");
                            keyboard.nextLine();
                        }
                    //Continues the war if the top card at the end of the war are still equal
                    }while(player1RemovedTopCard5.compareTo(player2RemovedTopCard5) == player2RemovedTopCard5.compareTo(player1RemovedTopCard5));
                }
            }
            //Adds to the plays that keep track of how many plays have been made
            countingPlays++;
            //. If there are 10 plays it shuffles and prints out a message that the cards have been shuffled.
            if(countingPlays >= 10)
            {
                player1Pile.shuffle();
                player2Pile.shuffle();
                System.out.println("Cards Shuffled");
                //resets the counter to 0
                countingPlays = 0;
            }
        //Continues the game of war while the players piles are bigger than 0
        }while(player1Pile.size() > 0 || player2Pile.size() > 0);
    }

    //Catches the Array 0 error and prints out who is the winner based on who has zero cards.
    catch (IndexOutOfBoundsException theException)  //tries to catch this type...
        {
            if(player1Pile.size() == 0)
            {
                System.out.println("Winner is Player 2" );
            }
            else
            System.out.println("Winner is Player 1" );

        }

    } //end of main
}//end of class
Arun Kumar
  • 11
  • 4
0

I'm half guessing, but I don't think you need to call getValue() on your ints

a statement like

if (player1 > player2)

is perfectly fine, assuming that both player1 and player2 are ints

0

You need to get the value of the Card objects in hands. You currently aren't actually assigning anything to player1 and player2. To get the value of the cards you need to call .getValue() on the actual objects, like int player1 = hands[0][0].getValue();

I updated your main function to demonstrate how it should look, and also made a few other changes that might help you later on.

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");

    }
}
jonhopkins
  • 3,844
  • 3
  • 27
  • 39
0

For the shuffle method you could use this code:

public void shuffle()
{
    Collections.shuffle(deck);
}
Tim Diekmann
  • 7,755
  • 11
  • 41
  • 69