Blackjack Assignment Solution
Something similar to a solution to the Blackjack Assignment in Java. If you were to base your own solution on this code, it would be obvious and it would be considered plagiarism for the purposes of our course.
Code
package edu.nyu.cs.fb1258;
import java.util.Random;
import java.util.Scanner;
public class BlackjackSimple {
public static void main(String[] args) {
//a string that keeps track of which cards we've dealt to the player
String playerCards = ""; //starts off blank
//two sentinel variables that keep track of whether to ask each player if they want a new card
boolean askDealerToHit = true;
boolean askPlayerToHit = true;
//two sentinel variables that keep track of whether either player has gone "bust".
boolean dealerIsBust = false;
boolean playerIsBust = false;
//two integers to keep a running total of the points
int playerTotal = 0;
int dealerTotal = 0;
//create a Random "object" to use to generate random numbers
//the default "seed" used by this built-in Random object is the current time in milliseconds.
//two separate pseudo-random number generators based on the same seed will produce the same pseudo-random numbers... beware!
Random randomGenerator = new Random();
//deal first "hand" to player
int playerCard1 = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10
int playerCard2 = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10
playerCards = playerCard1 + ", " + playerCard2; //store these cards as a string we use to tell the user what they have been dealt so far
//deal first "hand" to dealer
int dealerCard1 = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10
int dealerCard2 = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10
//calculate totals
playerTotal += playerCard1 + playerCard2; //add these two cards to the total
dealerTotal += dealerCard1 + dealerCard2;
//tell the user what they have
System.out.println("Your hand: " + playerCards);
//as long as neither player is bust and either player wants a new card, keep iterating the loop
while ( (!dealerIsBust && !playerIsBust) && (askDealerToHit || askPlayerToHit)) {
//ask the user whether they would like to hit
System.out.println("Would you like to 'hit' or 'stand'?");
Scanner scnr = new Scanner(System.in);
String playerResponse = scnr.nextLine(); //get the response
//handle the player's response
switch (playerResponse.toLowerCase()) {
case "hit":
//if they asked for a hit, give them a card.
int newCard = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10
playerTotal += newCard; //add this card to the numeric total we are keeping
playerCards+= ", " + newCard; //add this card to the list of cards we show the user
//tell the user what they have
System.out.println("Sure... You now have: " + playerCards);
//check whether player went "bust"
if (playerTotal > 21) {
playerIsBust = true; //flip the flag
}
break; //break out of the switch statement
case "stand":
//if they stand, we don't ask them if they want a hit again
askPlayerToHit = false; //change the flag
break; //break out of the switch statement
default:
//we only get here if the user entered something other than 'hit' or 'stand'
System.out.println("Sorry, I can't understand you... I guess you want to stand.");
askPlayerToHit = false; //change the flag
break; //break out of the switch statement
} //switch
//if the player went "bust", quit right now
if (playerIsBust) break; //break out of the while loop
//determine whether dealer whether they would like to hit
boolean dealerWantsCard = randomGenerator.nextBoolean(); //generate a pseudo-random boolean value
//pretend as if the dealer answered 'hit' or 'stand', like a real player
String dealerResponse = ""; //this will store the dealer's response that we generate
if (dealerWantsCard) {
dealerResponse = "hit"; //simulate a "hit" response
}
else {
dealerResponse = "stand"; //simulate a "stand" response
}
//handle the dealer's response
switch(dealerResponse.toLowerCase()) {
case "hit":
//if they asked for a hit, give them a card.
int newCard = randomGenerator.nextInt(10) + 1; //generate a pseudo-random number between 1-10
dealerTotal += newCard; //add this card to the numeric total we are keeping
//check whether dealer went "bust"
if (dealerTotal > 21) {
dealerIsBust = true; //flip the flag
}
break; //break out of the switch statement
case "stand":
//if they stand, we don't ask them if they want a hit again
askDealerToHit = false; //change the flag
break; //break out of the switch statement
} //switch
scnr.close(); //close Scanner to conserve resourcres
} //while
//players are both done hitting... now check for any busts and tell them who won
if (playerIsBust) {
//the player busted
System.out.println("You went bust with " + playerTotal + ".\nThe dealer wins with " + dealerTotal + "!");
}
else if (dealerIsBust) {
//the dealer busted
System.out.println("The dealer went bust with " + dealerTotal + ".\nYou win with " + playerTotal + "!");
}
else if (playerTotal > dealerTotal) {
System.out.println("The dealer has " + dealerTotal + ".\nYou win with " + playerTotal + "!");
}
else if (playerTotal < dealerTotal) {
System.out.println("The dealer has " + dealerTotal + " and you have " + playerTotal + ".\nDealer wins!");
}
else {
System.out.println("It's a tie! You and the dealer both have " + playerTotal + ".");
}
} //main method
} //class