diff --git a/10_Blackjack/java/src/Game.java b/10_Blackjack/java/src/Game.java index 9dbe4688..e81c8f56 100644 --- a/10_Blackjack/java/src/Game.java +++ b/10_Blackjack/java/src/Game.java @@ -47,15 +47,15 @@ public class Game { } while(true) { - int[] bets = new int[nPlayers]; // empty array initialized with all '0' valuses. + double[] bets = new double[nPlayers]; // empty array initialized with all '0' valuses. while(!betsAreValid(bets)){ userIo.println("BETS:"); for(int i = 0; i < nPlayers; i++) { // Note that the bet for player "1" is at index "0" in the bets // array and take care to avoid off-by-one errors. // TODO the BASIC version allows fractional bets (e.g. '1.5') of arbitrary precision - // We can use a float if we want--the original basic has floating point errors. Or we could use BigDecimal if we really want to fix that. - bets[i] = userIo.promptInt("#" + (i + 1)); //TODO: If there isn't a need for a separate Bets in the future, combine these two lines and convert to enhanced FOR loop + // We can use a double if we want--the original basic has doubleing point errors. Or we could use BigDecimal if we really want to fix that. + bets[i] = userIo.promptDouble("#" + (i + 1)); //TODO: If there isn't a need for a separate Bets in the future, combine these two lines and convert to enhanced FOR loop players.get(i).setCurrentBet(bets[i]); } } @@ -244,14 +244,14 @@ public class Game { } /** - * Validates that all bets are between 1 and 500 (inclusive). + * Validates that all bets are between 0 (exclusive) and 500 (inclusive). Fractional bets are valid. * * @param bets The array of bets for each player. * @return true if all bets are valid, false otherwise. */ - public boolean betsAreValid(int[] bets) { + public boolean betsAreValid(double[] bets) { return Arrays.stream(bets) - .allMatch(bet -> bet >= 1 && bet <= 500); + .allMatch(bet -> bet > 0 && bet <= 500); } } diff --git a/10_Blackjack/java/src/Player.java b/10_Blackjack/java/src/Player.java index f41fec83..e664780c 100644 --- a/10_Blackjack/java/src/Player.java +++ b/10_Blackjack/java/src/Player.java @@ -3,8 +3,8 @@ import java.util.LinkedList; public class Player { private int playerNumber; // e.g. playerNumber = 1 means "this is Player 1" - private int currentBet; - private int total; + private double currentBet; + private double total; private LinkedList hand; // TODO we'll need to decide how to deal with a split hand or doubled down bet. @@ -26,11 +26,11 @@ public class Player { return this.playerNumber; } - public void setCurrentBet(int currentBet) { + public void setCurrentBet(double currentBet) { this.currentBet = currentBet; } - public int getCurrentBet() { + public double getCurrentBet() { return this.currentBet; } @@ -52,7 +52,7 @@ public class Player { * Returns the total of all bets won. * @return Total value */ - public int getTotal() { + public double getTotal() { return this.total; } diff --git a/10_Blackjack/java/src/UserIo.java b/10_Blackjack/java/src/UserIo.java index 272614da..fcaf826f 100644 --- a/10_Blackjack/java/src/UserIo.java +++ b/10_Blackjack/java/src/UserIo.java @@ -132,4 +132,29 @@ public class UserIo { } } } + + /** + * Prompts the user for a double. As in Vintage Basic, "the optional + * prompt string is followed by a question mark and a space." and if the + * input is non-numeric, "an error will be generated and the user will be + * re-prompted."" + * + * @param prompt The prompt to display to the user. + * @return the number given by the user. + */ + public double promptDouble(String prompt) { + print(prompt + "? "); + + while(true) { + String input = readLine(); + try { + return Double.parseDouble(input); + } catch(NumberFormatException e) { + // Input was not numeric. + println("!NUMBER EXPECTED - RETRY INPUT LINE"); + print("? "); + continue; + } + } + } }