Error Message:
Exception in thread \"main\" java.lang.NumberFormatException: For input string: \"Ace of Clubs\"
at java.lang.NumberFormatException.forInputString
The very first thing that threw me for a loop (no pun intended) was you were limiting the value to 1-13 when it needs to be 0-52. Also with your logic the value was always be higher. A better approach is with a number generator. Here is my code using a number generator (or Java Random):
public static void main(String[] args) {
String[] cards = { "Ace of Clubs", "1 of Clubs", "2 of Clubs",
"3 of Clubs", "4 of Clubs", "5 of Clubs", "6 of Clubs",
"7 of Clubs", "8 of Clubs", "9 of Clubs", "10 of Clubs",
"Queen of Clubs", "King of Clubs", "Ace of Diamonds",
"1 of Diamonds", "2 of Diamonds", "3 of Diamonds",
"4 of Diamonds", "5 of Diamonds", "6 of Diamonds",
"7 of Diamonds", "8 of Diamonds", "9 of Diamonds",
"10 of Diamonds", "Queen of Diamonds", "King of Diamonds",
"Ace of Hearts", "1 of Hearts", "2 of Hearts", "3 of Hearts",
"4 of Hearts", "5 of Hearts", "6 of Hearts", "7 of Hearts",
"8 of Hearts", "9 of Hearts", "10 of Hearts",
"Queen of Hearts", "King of Hearts", "Ace of Spades",
"1 of Spades", "2 of Spades", "3 of Spades", "4 of Spades",
"5 of Spades", "6 of Spades", "7 of Spades", "8 of Spades",
"9 of Spades", "10 of Spades", "Queen of Spades",
"King of Spades" };
Scanner scanner = new Scanner(System.in);
Random rand = new Random();
String response = "";
int index = 0;
int value = 0;
while (!response.equals("q") && index < 52) {
// set next card value based on current set of cards in play
if (cards[index].endsWith("Clubs")) {
value = rand.nextInt(12);
}
if (cards[index].endsWith("Diamonds")) {
value = rand.nextInt(12) + 13;
}
if (cards[index].endsWith("Hearts")) {
value = rand.nextInt(12) + 26;
}
if (cards[index].endsWith("Spades")) {
value = rand.nextInt(12) + 39;
}
// display card too user (NOTE: we use the random number not the index)
System.out.println("Card is: " + cards[value]);
// ask user what well the next card be
System.out.println("Will the next card be higher or lower?, press q if you want to quit");
response = scanner.nextLine();
// display if user was right (NOTE: compared the random number to the current index)
// ignore incorrect response and just continue
if ((value > index && response.startsWith("h")) || (value < index && response.startsWith("l"))) {
System.out.println("You answer was right, well done!");
} else {
System.out.println("You answer was wrong, try again!");
}
// continue loop
index++;
}
}
As for the NumberFormatException I believe Nicolas Filotto did a good job explaining that.