Remove redundant Card record code

Java Records automatically acquire an implementation of equals and
hashCode that accounts for their components. They also have read
accessors for their components (card.suit() to get the suit).
This commit is contained in:
Dave Burke
2022-03-18 17:01:06 -05:00
parent 0b1f809707
commit cdf194f770
5 changed files with 8 additions and 40 deletions

View File

@@ -24,14 +24,6 @@ record Card(int value, Suit suit) {
}
}
public int getValue() {
return this.value;
}
public Suit getSuit() {
return this.suit;
}
public String toString() {
StringBuilder result = new StringBuilder(2);
if(value == 1) {
@@ -64,28 +56,4 @@ record Card(int value, Suit suit) {
}
}
@Override
public boolean equals(Object obj) {
// Overriding 'equals' and 'hashCode' (below) make your class work correctly
// with all sorts of methods in the Java API that need to determine the uniqueness
// of an instance (like a Set).
if(obj.getClass() != Card.class) {
return false;
}
Card other = (Card) obj;
return this.getSuit() == other.getSuit() && this.getValue() == other.getValue();
}
@Override
public int hashCode() {
// This is a fairly standard hashCode implementation for a data object.
// The details are beyond the scope of this comment, but most IDEs can generate
// this for you.
// Note that it's a best practice to implement hashCode whenever you implement equals and vice versa.
int hash = 7;
hash = 31 * hash + (int) value;
hash = 31 * hash + suit.hashCode();
return hash;
}
}

View File

@@ -72,7 +72,7 @@ public class Game {
printInitialDeal(players, dealer);
if(dealer.getHand().get(0).getValue() == 1) {
if(dealer.getHand().get(0).value() == 1) {
collectInsurance(players);
}
@@ -81,7 +81,7 @@ public class Game {
userIo.println("FOR BLACKJACK");
} else {
Card dealerFirstCard = dealer.getHand().get(0);
if(dealerFirstCard.getValue() == 1 || dealerFirstCard.getValue() > 9) {
if(dealerFirstCard.value() == 1 || dealerFirstCard.value() > 9) {
userIo.println("");
userIo.println("NO DEALER BLACKJACK.");
} // else dealer blackjack is imposible
@@ -199,7 +199,7 @@ public class Game {
card = deck.deal();
player.dealCard(card, 2);
userIo.println("SECOND HAND RECEIVES " + card.toProseString());
if(player.getHand().get(0).getValue() > 1){ //Can't play after splitting aces
if(player.getHand().get(0).value() > 1){ //Can't play after splitting aces
play(player, 1);
play(player, 2);
}

View File

@@ -105,7 +105,7 @@ public class Player {
// Can't split twice
return false;
} else {
boolean isPair = this.hand.get(0).getValue() == this.hand.get(1).getValue();
boolean isPair = this.hand.get(0).value() == this.hand.get(1).value();
return isPair;
}
}

View File

@@ -10,9 +10,9 @@ public final class ScoringUtils {
* @return The numeric value of a hand. A value over 21 indicates a bust.
*/
public static final int scoreHand(List<Card> hand) {
int nAces = (int) hand.stream().filter(c -> c.getValue() == 1).count();
int nAces = (int) hand.stream().filter(c -> c.value() == 1).count();
int value = hand.stream()
.mapToInt(Card::getValue)
.mapToInt(Card::value)
.filter(v -> v != 1) // start without aces
.map(v -> v > 10 ? 10 : v) // all face cards are worth 10. The 'expr ? a : b' syntax is called the
// 'ternary operator'