/* Blackjack.java - CS 111A - Craig Persiko
This program will score a hand of Blackjack.
Input: User inputs number of cards along with the
value of each card.
Output: The program will calculate the total of each
hand. For cases with aces, the best combination
will be used.
*/
import java.util.Scanner;
class Blackjack
{
static int total = 0; // static member variables (fields)
// for all static methods to share
static Scanner keyIn = new Scanner(System.in);
public static void main(String args[])
{
String again;
System.out.println("Welcome to the Blackjack Counter");
do
{
get_input();
if (total > 21)
System.out.println("You BUSTED with " + total + "!");
else
System.out.println("Your hand is: " + total);
System.out.print("Do you wish to continue? ");
again = keyIn.nextLine();
} while (Character.toLowerCase(again.charAt(0)) == 'y');
}
//Request input from user and set total value
// in "total" instance variable
static void get_input()
{
int num_cards=0, card_no;
int ace_count=0;
total = 0;
do
{
System.out.print("How many cards do you have? ");
num_cards = keyIn.nextInt();
keyIn.nextLine(); // dispose of newline
}while(!verifyCardNum(num_cards));
for (card_no=1; card_no <= num_cards; card_no ++)
{
ace_count += get_card(card_no);
}
if(total <= 11 && ace_count > 0)
//If under 21 and has aces, change an ace to count as 11 points
total += 10;
}
// Show error and return false if invalid # of cards
static boolean verifyCardNum(int num)
{
if(num < 2)
{
System.out.println("You must have at least 2 cards");
return false;
}
else
return true;
}
// get one card's value, adding it to total (instance variable)
// returns 1 if card is an ace, 0 otherwise.
static int get_card(int card_num)
{
String card_val;
do
{
System.out.print("Enter value of card # " + card_num + ": ");
card_val = keyIn.nextLine();
switch (Character.toLowerCase(card_val.charAt(0)))
{
case 'a':
total += 1; // count ace as 1 for now; later it may change
return 1;
case 'k': case 'q': case 'j':
total += 10;
return 0;
case '1': case '2': case '3':
case '4': case '5': case '6':
case '7': case '8': case '9':
int value = Integer.parseInt(card_val);
if (value < 2 || value > 10)
System.out.println(
"Please enter a number between 2 and 10, ace, jack, queen, or king.");
else
{
total += value;
return 0;
}
break;
default:
System.out.println("Not a valid entry. Please try again.");
}
}while (true); // only way to exit loop is to return from function
// return 0;
// above line might have been required if the compiler said "return" missing.
}
}
/* Sample Output:
Welcome to the Blackjack Counter
How many cards do you have? 2
Enter value of card # 1: Queen
Enter value of card # 2: Ace
Your hand is: 21
Do you wish to continue? yes
How many cards do you have? 3
Enter value of card # 1: 10
Enter value of card # 2: king
Enter value of card # 3: ace
Your hand is: 21
Do you wish to continue? y
How many cards do you have? 5
Enter value of card # 1: 1
Please enter a number between 2 and 10, ace, jack, queen, or king.
Enter value of card # 1: high
Not a valid entry. Please try again.
Enter value of card # 1: ace
Enter value of card # 2: ace
Enter value of card # 3: 6
Enter value of card # 4: ace
Enter value of card # 5: ace
Your hand is: 20
Do you wish to continue? y
How many cards do you have? 1
You must have at least 2 cards
How many cards do you have? 3
Enter value of card # 1: 7
Enter value of card # 2: 6
Enter value of card # 3: 9
You BUSTED with 22!
Do you wish to continue? n
*/
syntax highlighted by Code2HTML, v. 0.9