package solitaire; import java.util.LinkedList; import java.util.List; final class Foundation { private final List cards; private final Suit suit; Foundation(Suit suit) { this.cards = new LinkedList<>(); this.suit = suit; } Suit getSuit() { return suit; } boolean isFull() { return cards.size() == Rank.RANKS.size(); } private boolean isValidNextCard(Card card) { Rank cardRank, lastRank; if (card.getSuit() != this.suit) return false; cardRank = card.getRank(); if (cards.isEmpty()) return cardRank == Rank.ACE; lastRank = cards.getLast().getRank(); return cardRank.isSuccessorOf(lastRank); } boolean add(Card card) { if (!isValidNextCard(card)) return false; cards.add(card); return true; } @Override public String toString() { if (cards.isEmpty()) return String.format("( %s )", suit); return String.format("(%s)", cards.getLast()); } }