Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Two Missing Return Statements

Tags:

java

import java.util.Scanner;

public class BlackJack {

static Scanner stdin = new Scanner(System.in);
static String[] deck = new String[52];
static String dealerCard = "", dealerHiddenCard = "", userCard = "", userCardTwo = "";
static int dealerCounter = 0, userCounter = 0;

public static void main (String[] args) {




    System.out.println("\n***Welcome to the grand Command Line Casino!***" +
         "\n***Today we are only playing single deck Black Jack!***" +
         "\n***But that's what we do everyday! HAHA!***\n");

    //Creates Deck of cards
    String[] suit = { "Clubs", "Diamonds", "Hearts", "Spades" };
    String[] rank = { "2", "3", "4", "5", "6", "7", "8", "9", "10",
            "Jack", "Queen", "King", "Ace" };

    for (int a=0; a < rank.length; a++) {
        for (int b=0; b < suit.length; b++){
            deck[suit.length*a + b] = (rank[a] +" of "+ suit[b]);
        }
    }

    //Assigns two cards to the dealer 
    //Finds the Integer value of each card and adds it to the dealerCounter

    //first dealer card
    System.out.println("----Dealer's Cards:----");
    System.out.println("(Dealer's First Card Placed Face Down)");
    dealerHiddenCard = randomCard(dealerHiddenCard);
    dealerCard = assignValue(dealerHiddenCard);
    dealerCounter = Integer.parseInt(dealerCard);

    //second dealer card
    dealerCard = randomCard(dealerCard);
    System.out.println(dealerCard);
    dealerCard = assignValue(dealerCard);
    dealerCounter += Integer.parseInt(dealerCard);


    //Assigns two cards to the user 
    //Finds the Integer value of each card and adds it to the userCounter

    //first user card
    System.out.println("\n----Your Cards:----");
    userCardTwo = randomCard(userCardTwo);
    System.out.println(userCardTwo);
    userCardTwo = assignValue(userCardTwo);
    userCounter = Integer.parseInt(userCardTwo);

    //second user card
    userCard = randomCard(userCard);
    System.out.println(userCard);
    userCard = assignValue(userCard);
    userCounter += Integer.parseInt(userCard);

/////// HERES ONE /////////
/////// HERES ONE /////////
    userAceHandler(userCounter);
/////// HERES ONE /////////
/////// HERES ONE /////////

        if (userCounter == 21)                {
            System.out.println("Black Jack! You Win!"); }


    hitStay();

    dealersTurn();          
}



public static String randomCard(String draw) {
//Pulls a random card from the deck

    while (true) {
        //Generates a random number between 0 and 52
        int card = (int)(Math.random()*52);
        draw = deck[card];

        //Makes sure the same card isn't drawn twice
        if (draw == "0") {
            continue;}
        else {
            deck[card] = "0";
            return draw;}
    }

}



public static String assignValue(String cardName) {
//Assigns a number value to the card

    if (cardName.contains("2"))    {
        cardName = "2";         }
    if (cardName.contains("3"))    {
        cardName = "3";         }
    if (cardName.contains("4"))    {
        cardName = "4";         }
    if (cardName.contains("5"))    {
        cardName = "5";         }
    if (cardName.contains("6"))    {
        cardName = "6";         }
    if (cardName.contains("7"))    {
        cardName = "7";         }
    if (cardName.contains("8"))    {
        cardName = "8";         }
    if (cardName.contains("9"))    {
        cardName = "9";         }
    if (cardName.contains("10"))   {
        cardName = "10";        }
    if (cardName.contains("Jack")) {
        cardName = "10";        }
    if (cardName.contains("Queen")){
        cardName = "10";        }
    if (cardName.contains("King")) {
        cardName = "10";        }
    if (cardName.contains("Ace"))  {
        cardName = "11";        }

    return cardName;
}



public static void hitStay() {
//Processes a user 'Hit or Stay' selection

    int userInput;

    System.out.println("\nHit or Stay?");
    System.out.println("(1) Hit\n(2) Stay");
    userInput = stdin.nextInt();

    if (userInput == 1){    
    //Draws another card and adds it to the userCounter
    //Decides where to go depending on new userCounter value

        userCard = randomCard(userCard);
        System.out.println("\n"+userCard);
        userCard = assignValue(userCard);
        userCounter += Integer.parseInt(userCard);

/////// HERES ONE /////////
/////// HERES ONE /////////
        userAceHandler(userCounter);
/////// HERES ONE /////////
/////// HERES ONE /////////

        System.out.print("(Current Count = "+userCounter+")");

        if (userCounter == 21)                              {
            System.out.println("\n21! Now it's the dealer's turn");  
                                         }
        if (userCounter < 21)                       {
            hitStay();                   }

        if (userCounter > 21)                       {
            System.out.println("Bust! Maybe next time");
            System.exit(1);                  }
    }   
    if (userInput == 2){                       
        System.out.println("\nAlright, dealer's turn");
        System.out.println("\n(Dealer Flips His Hidden Card Over)");
        System.out.println(dealerHiddenCard);
        System.out.println("Dealer Count = "+dealerCounter+")");    
    }

}



public static void dealersTurn() {
//processes the dealers turn after the user has decided to 'stay'

    /////// HERES ONE /////////
    /////// HERES ONE /////////
    dealerAceHandler(dealerCounter);
    /////// HERES ONE /////////
    /////// HERES ONE /////////

    if (dealerCounter > userCounter)                {
        System.out.println("\nDealer Wins! Maybe next time.");   }
        System.exit(1);

    if (dealerCounter == userCounter && dealerCounter > 17)     {
        System.out.println("\nPush! (tie game)");
        System.exit(1);                      }

    if (dealerCounter > userCounter && dealerCounter < 21 
                    && dealerCounter >= 17)     {
        System.out.println("\nDealer Wins! Maybe next time.");
        System.exit(1);                      }

    if (dealerCounter < userCounter && dealerCounter >= 17)     {
        System.out.println("\nYou Win!");
        System.exit(1);                      }

    if (dealerCounter > 21)                     {
        System.out.println("\nDealer Bust! You Win!");
        System.exit(1);                      }

    if (dealerCounter == 21)                    {
        System.out.println("\nDealer Wins! Maybe next time.");
        System.exit(1);                      }

    if (dealerCounter < userCounter || dealerCounter < 17)      {
        dealerCard = randomCard(dealerCard);
        System.out.println("\n"+dealerCard);
        dealerCard = assignValue(dealerCard);
        dealerCounter += Integer.parseInt(dealerCard);
        System.out.println("(Dealer Count = "+dealerCounter+")");

        dealersTurn();                       }
}



public static int userAceHandler(int userCounter) {
//handles the situation if an Ace is drawn for the user

    if (userCounter >= 22 && userCard == "11")          {
        userCounter = userCounter - 10; 
        return userCounter;                  }
}



public static int dealerAceHandler(int dealerCounter) {
//handles the situation if an Ace is drawn for the dealer

    if (dealerCounter >= 22 && dealerCard == "11")          {
        dealerCounter = dealerCounter - 10;
        return dealerCounter;                    }


}

}

Alright! I've spent about 10 hours making this today (its a rudimentary blackjack game) and I had it working perfectly before adding in the last two methods at the bottom of the code. They are to handle the the 'Ace' condition in my code... Unfortunately when I try to compile it's telling me that I'm missing a return statement for both. I'm only 5 weeks into my programming career and a week into my "making my own methods" career so I haven't got a clue. i thought i did it right.

I'll mark with extensive notes where I'm calling the Methods at (only 3 spots total spots for each one)

Like i said though it was working perfectly with everything else before i added these in.

Thank you so much for the help!

like image 603
DojoOria Avatar asked Dec 11 '22 23:12

DojoOria


1 Answers

You do have return statements in your userAceHandler functions, but it's not enough. What if the if condition is not true? There is no return statement in that case. Java requires that you have a return statement for every possible code path out of a non-void function.

like image 125
Greg Hewgill Avatar answered Dec 13 '22 11:12

Greg Hewgill