The assignment I have is to return true if a deck of cards is a consecutive straight flush, which means an entire deck that consists of a sequence of cards of the same suit with consecutive ranks. Since these are cards, this would mean that a card with rank 14 (A) would go BEFORE a card with rank 2.
How would I go about establishing that the order of cards goes 12,13,14,2,3 for example?
This is the Card class
public class Card {
private String suit;
private int rank;
public Card(String suit, int rank) {
super();
this.suit = suit;
this.rank = rank;
}
@Override
public String toString() {
return "[" + rank + "," + suit + "]";
}
@Override
public boolean equals(Object c2) {
if (!(c2 instanceof Card)) {
throw new RuntimeException("Illegal argument to Card.equals()");
}
Card card2 = (Card) c2;
return ((this.getSuit().equals(card2.getSuit())) &&
(this.getRank() == card2.getRank()));
}
public String getSuit() {
return suit;
}
public int getRank() {
return rank;
}
public boolean sameSuitAs(Card card2) {
return (this.getSuit().equals(card2.getSuit()));
}
public boolean sameRankAs(Card card2) {
return (this.getRank() == card2.getRank());
}
public boolean isAnA() {
if (getRank() != 14) {
return false;
}
return true;
}
public boolean isPair(Card c) {
int rank = getRank();
if (rank == c.getRank()) {
return true;
}
return false;
}
public boolean isTrio(Card c1, Card c2) {
if (c1.isPair(c2) == true ) {
if (isPair(c1) == true) {
return true;
}
}
return false;
}
public boolean isFourTuple(Card c1, Card c2, Card c3) {
if (c1.isPair(c2) == true ) {
if (c2.isPair(c3) == true) {
if (isPair(c1) == true) {
return true;
}
}
}
return false;
}
public static long countCardsBySuit(Card[] deck, Card target) {
long result = 0;
String suit = target.getSuit();
for (int i = 0; i < deck.length; i++) {
if (suit == deck[i].getSuit()) {
result ++;
}
}
return result;
}
public static boolean cardExists(Card[] deck, Card target) {
String targetsuit = target.getSuit();
int targetrank = target.getRank();
for (int i = 0; i < deck.length; i++) {
if (targetsuit == deck[i].getSuit() && targetrank == deck[i].getRank()) {
return true;
}
}
return false;
}
public static boolean consecutivePairExists(Card[] deck) {
int pairs = 0;
for (int i = 0; i < deck.length; i++) {
int targetrank = deck[i].getRank();
for (int j = 0 + i + 1; i < deck.length - 3; j ++) {
if (targetrank == deck[j].getRank()) {
pairs++;
if (pairs > 1) {
return true;
}
}
}
}
return false;
}
public static boolean pairExists(Card[] deck) {
for (int i = 0; i < deck.length; i++) {
int targetrank = deck[i].getRank();
if (i == 0) {
for (int k = 1 ; k <deck.length; k++) {
if (targetrank == deck[k].getRank()) {
return true;
}
}
}
else {
for (int j = i + 1 ; j <deck.length; j++) {
if (targetrank == deck[j].getRank()) {
return true;
}
}
}
}
return false;
}
public static boolean isConsecutiveStraightFlush(Card[] deck) {
if (deck.length > 1) {
long result = 0;
String suit = deck[0].getSuit();
for (int i = 1; i < deck.length; i++) {
if (suit == deck[i].getSuit()) {
result ++;
}
}
if (result == deck.length - 1) {
int count = 0;
int rank = deck[0].getRank();
for (int j = 1; j < deck.length; j++) {
if (rank - deck[j].getRank() == -1) {
count++;
rank = deck[j].getRank();
if (count == deck.length - 1) {
return true;
}
}
}
}
}
return false;
}
}
and this is the JUnit Test Case CardTest
import static org.junit.Assert.*;
import org.junit.Test;
public class CardTest {
Card diamond1 = new Card("Diamond", 1);
Card diamond2 = new Card("Diamond", 2);
Card spade1 = new Card("Spade", 1);
Card spade2 = new Card("Spade", 2);
Card spadeA = new Card("Spade", 14);
Card card2C = new Card("Club", 2);
Card card2S = new Card("Spade", 2);
Card card2D = new Card("Diamond", 2);
Card card2H = new Card("Heart", 2);
Card card3C = new Card("Club", 3);
Card card4C = new Card("Club", 4);
Card card5C = new Card("Club", 5);
Card card6C = new Card("Club", 6);
Card card7C = new Card("Club", 7);
Card card8C = new Card("Club", 8);
Card card9C = new Card("Club", 9);
Card card10C = new Card("Club", 10);
Card cardJC = new Card("Club", 11);
Card cardQC = new Card("Club", 12);
Card cardKC = new Card("Club", 13);
Card cardAC = new Card("Club", 14);
Card[] deck1 = { card2C, card2S, card2D, card3C };
Card[] deck2 = { card2C, card3C, card2D};
Card[] deck3 = { card2C, card3C, spadeA};
Card[] straightFlush1 = { card2C, card3C, card4C, card5C, card6C};
Card[] straightFlush2 = { cardQC, cardKC, cardAC, card2C, card3C};
Card[] emptyDeck = {};
@Test
public void testToString() {
assertTrue("Card.toString: generates incorrect String", diamond1.toString().equals("[1,Diamond]"));
assertTrue("Card.toString: generates incorrect String", spade2.toString().equals("[2,Spade]"));
}
@Test
public void testEquals() {
assertTrue("Card.equals: Yields false incorrectly", diamond1.equals(diamond1));
assertFalse("Card.equals: Yields true incorrectly", diamond1.equals(diamond2));
}
@Test
public void testSameSuitRank() {
assertTrue("Card.sameRankAs: Yields false incorrectly", diamond1.sameRankAs(spade1));
assertTrue("Card.sameSuitAs: Yields false incorrectly", diamond1.sameSuitAs(diamond2));
assertFalse("Card.sameRankAs: Yields true incorrectly", spade1.sameRankAs(spade2));
assertFalse("Card.sameSuitAs: Yields true incorrectly", spade2.sameSuitAs(diamond1));
}
@Test
public void testIsConsecutiveStraightFlush() {
assertFalse("isConsecutiveStraightFlush: returns true incorrectly", Card.isConsecutiveStraightFlush(emptyDeck));
assertFalse("isConsecutiveStraightFlush: returns true incorrectly", Card.isConsecutiveStraightFlush(deck1));
assertTrue("isConsecutiveStraightFlush: returns false incorrectly", Card.isConsecutiveStraightFlush(straightFlush1));
assertTrue("isConsecutiveStraightFlush: returns false incorrectly", Card.isConsecutiveStraightFlush(straightFlush2));
}
}
Any help would be appreciated