You are going to write a program that implements a sorted list using dynamic all
ID: 3715056 • Letter: Y
Question
You are going to write a program that implements a sorted list using dynamic allocated arrays.
DataFile.txt contains the information of poker cards.
1. C: clubs (lowest) , D: diamonds, H: hearts, S: spades (highest)
2. 2 (lowest), 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A
3. No Joker cards
4. Any C cards are lower than any D cards.
DataFile Content (You can write the file specification into your program.):
For examples, DJ means J of Diamonds; H7 means 7 of hearts.
Your job
1. Create a list by dynamic allocated array and set the size to 20
2. Read the first 20 cards in the first line of the file, the put them one by one into the list by implementing and using putItem(). The list must be kept sorted in ascending order.
Then output all the cards in the list in one line separating by commas.
3.Then delete the cards indicated in the second line of the file by using deleteItem()
Then output all the cards in the list in one line separating by commas.
4. Then put the items in the third line in to the list. Must use putItem()
Then output all the cards in the list in one line separating by commas.
5. Search the current list for the elements in the list. Then output the result as the follows. Yes or No depends on whether the card exists in the current list. Must implement and use getItem()
C9 NO, C10 YES
6. A printAll() function should be defined and called in order to output all the contents in the list.
7. A compareTo() function must be defined and used to compare which card is greater, less, or equal.
Explanation / Answer
Code :
Card.java
public class Card<T> implements Comparable<T> {
private String faceValue;
private int cardType;
private String[] cardOrder = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" };
@Override
public String toString() {
return "Card [faceValue=" + faceValue + ", cardType=" + cardType + "]";
}
public String getFaceValue() {
return faceValue;
}
public void setFaceValue(String faceValue) {
this.faceValue = faceValue;
}
public int getCardType() {
return cardType;
}
public void setCardType(int cardType) {
this.cardType = cardType;
}
public Card(String faceValue) {
super();
if (faceValue.charAt(0) == 'C') {
this.cardType = 0;
} else if (faceValue.charAt(0) == 'D') {
this.cardType = 1;
} else if (faceValue.charAt(0) == 'H') {
this.cardType = 2;
} else if (faceValue.charAt(0) == 'S') {
this.cardType = 3;
}
this.faceValue = faceValue;
}
@Override
public int compareTo(T o) {
Card card = (Card) o;
if (card.cardType < this.cardType) {
return 1;
} else if (card.cardType > this.cardType) {
return -1;
} else {
String cardValue = card.faceValue.substring(1, card.faceValue.length());
String currentValue = this.faceValue.substring(1, this.faceValue.length());
int cardValueOrder = 0, currentValueOrder = 0;
for(int i=0; i < cardOrder.length; i++) {
if(cardOrder[i].equals(cardValue)) {
cardValueOrder = i;
}
if(cardOrder[i].equals(currentValue)){
currentValueOrder = i;
}
}
if(cardValueOrder < currentValueOrder) {
return 1;
} else {
return -1;
}
}
}
}
PokerRead.java - to read the data from file as expected and returns in 2 dimensional array
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class PokerRead {
String[][] readDataFromFile(String fileName) {
String[][] cards = new String[4][20];
try {
FileReader fileIs = new FileReader(fileName);
BufferedReader objIs = new BufferedReader(fileIs);
String line;
int i = 0;
while ((line = objIs.readLine()) != null) {
cards[i] = line.split(",");
i++;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return cards;
}
}
PokerMain.java - where we can start the program, putItem and deleteItems are not separately implemented, you can separete them out in this file once you understand the logic.
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class PokerMain {
public static void main(String arg[]) {
String[][] cards = new String[4][20];
PokerRead pr = new PokerRead();
PokerMain pm = new PokerMain();
cards = pr.readDataFromFile("src/DataFile.txt");
int count = 0;
List<Card> cardsList = new ArrayList<>();
for (int i = 0; i < 20; i++) {
cardsList.add(new Card<>(cards[0][i]));
}
// for (Card card : cardsList) {
// System.out.println(card);
// }
Collections.sort(cardsList);
pm.printAll(cardsList);
List<Card> toBeRemoved = new ArrayList<>();
for (int i = 0; i < cards[1].length; i++) {
for (Card card : cardsList) {
if (card.getFaceValue().equals(cards[1][i])) {
toBeRemoved.add(card);
}
}
}
cardsList.removeAll(toBeRemoved);
pm.printAll(cardsList);
for (int i = 0; i < cards[2].length; i++) {
cardsList.add(new Card(cards[2][i]));
}
Collections.sort(cardsList);
pm.printAll(cardsList);
for (int i = 0; i < cards[3].length; i++) {
boolean found = false;
for (Card card : cardsList) {
if (card.getFaceValue().equals(cards[3][i])) {
found = true;
}
}
if(found) {
System.out.print(cards[3][i] + " YES");
} else {
System.out.print(cards[3][i] + " NO");
}
if((i + 1) != cards[3].length) {
System.out.print(",");
}
}
}
void printAll(List<Card> cards) {
for (int i = 0; i < cards.size(); i++) {
System.out.print(cards.get(i).getFaceValue());
if ((i + 1) != cards.size()) {
System.out.print(",");
}
}
System.out.println("");
}
}
DataFile.txt
H4,C8,HJ,C9,D10,D5,DK,D2,S7,DJ,H3,H6,S10,HK,DQ,C2,CJ,C4,CQ,D8,C3,SA,S2,HQ,S8,C6,D9,S3,SQ,C5,S4,H5,SJ,D3,H8,CK,S6,D7,S9,H2,CA,C7,H7,DA,D4,H9,D6,HA,H10,S5,C10
H4,D5,HK,D2
H4,HK,SK
C9,C10
Output :
C2,C4,C8,C9,CJ,CQ,D2,D5,D8,D10,DJ,DQ,DK,H3,H4,H6,HJ,HK,S7,S10
C2,C4,C8,C9,CJ,CQ,D8,D10,DJ,DQ,DK,H3,H6,HJ,S7,S10
C2,C4,C8,C9,CJ,CQ,D8,D10,DJ,DQ,DK,H3,H4,H6,HJ,HK,S7,S10,SK
C9 YES,C10 NO
All the best.
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.