👤

Help pls


The first class:


package assignment2;


import java.util.Random;


public class Deck {

public static String[] suitsInOrder = {"clubs", "diamonds", "hearts", "spades"};

public static Random gen = new Random();


public int numOfCards; // contains the total number of cards in the deck

public Card head; // contains a pointer to the card on the top of the deck


/*

* TODO: Initializes a Deck object using the inputs provided

*/

public Deck(int numOfCardsPerSuit, int numOfSuits) {

/**** ADD CODE HERE ****/

}


/*

* TODO: Implements a copy constructor for Deck using Card.getCopy().

* This method runs in O(n), where n is the number of cards in d.

*/

public Deck(Deck d) {

/**** ADD CODE HERE ****/

}


/*

* For testing purposes we need a default constructor.

*/

public Deck() {}


/*

* TODO: Adds the specified card at the bottom of the deck. This

* method runs in $O(1)$.

*/

public void addCard(Card c) {

/**** ADD CODE HERE ****/

}


/*

* TODO: Shuffles the deck using the algorithm described in the pdf.

* This method runs in O(n) and uses O(n) space, where n is the total

* number of cards in the deck.

*/

public void shuffle() {

/**** ADD CODE HERE ****/

}


/*

* TODO: Returns a reference to the joker with the specified color in

* the deck. This method runs in O(n), where n is the total number of

* cards in the deck.

*/

public Joker locateJoker(String color) {

/**** ADD CODE HERE ****/

return null;

}


/*

* TODO: Moved the specified Card, p positions down the deck. You can

* assume that the input Card does belong to the deck (hence the deck is

* not empty). This method runs in O(p).

*/

public void moveCard(Card c, int p) {

/**** ADD CODE HERE ****/

}


/*

* TODO: Performs a triple cut on the deck using the two input cards. You

* can assume that the input cards belong to the deck and the first one is

* nearest to the top of the deck. This method runs in O(1)

*/

public void tripleCut(Card firstCard, Card secondCard) {

/**** ADD CODE HERE ****/

}


/*

* TODO: Performs a count cut on the deck. Note that if the value of the

* bottom card is equal to a multiple of the number of cards in the deck,

* then the method should not do anything. This method runs in O(n).

*/

public void countCut() {

/**** ADD CODE HERE ****/

}


/*

* TODO: Returns the card that can be found by looking at the value of the

* card on the top of the deck, and counting down that many cards. If the

* card found is a Joker, then the method returns null, otherwise it returns

* the Card found. This method runs in O(n).

*/

public Card lookUpCard() {

/**** ADD CODE HERE ****/

return null;

}


/*

* TODO: Uses the Solitaire algorithm to generate one value for the keystream

* using this deck. This method runs in O(n).

*/

public int generateNextKeystreamValue() {

/**** ADD CODE HERE ****/

return 0;

}



public abstract class Card {

public Card next;

public Card prev;


public abstract Card getCopy();

public abstract int getValue();


}


public class PlayingCard extends Card {

public String suit;

public int rank;


public PlayingCard(String s, int r) {

this.suit = s.toLowerCase();

this.rank = r;

}


public String toString() {

String info = "";

if (this.rank == 1) {

//info += "Ace";

info += "A";

} else if (this.rank > 10) {

String[] cards = {"Jack", "Queen", "King"};

//info += cards[this.rank - 11];

info += cards[this.rank - 11].charAt(0);

} else {

info += this.rank;

}

//info += " of " + this.suit;

info = (info + this.suit.charAt(0)).toUpperCase();

return info;

}


public PlayingCard getCopy() {

return new PlayingCard(this.suit, this.rank);

}


public int getValue() {

int i;

for (i = 0; i < suitsInOrder.length; i++) {

if (this.suit.equals(suitsInOrder[i]))

break;

}


return this.rank + 13*i;

}


}


public class Joker extends Card{

public String redOrBlack;


public Joker(String c) {

if (!c.equalsIgnoreCase("red") && !c.equalsIgnoreCase("black"))

throw new IllegalArgumentException("Jokers can only be red or black");


this.redOrBlack = c.toLowerCase();

}


public String toString() {

//return this.redOrBlack + " Joker";

return (this.redOrBlack.charAt(0) + "J").toUpperCase();

}


public Joker getCopy() {

return new Joker(this.redOrBlack);

}


public int getValue() {

return numOfCards - 1;

}


public String getColor() {

return this.redOrBlack;

}

}


}


Second class:


package assignment2;



public class SolitaireCipher {

public Deck key;


public SolitaireCipher (Deck key) {

this.key = new Deck(key); // deep copy of the deck

}


/*

* TODO: Generates a keystream of the given size

*/

public int[] getKeystream(int size) {

/**** ADD CODE HERE ****/

return null;

}


/*

* TODO: Encodes the input message using the algorithm described in the pdf.

*/

public String encode(String msg) {

/**** ADD CODE HERE ****/

return null;

}


/*

* TODO: Decodes the input message using the algorithm described in the pdf.

*/

public String decode(String msg) {

/**** ADD CODE HERE ****/

return null;

}


}

Help PlsThe First Classpackage Assignment2import JavautilRandompublic Class Deck Public Static String SuitsInOrder Clubs Diamonds Hearts Spadespublic Static Ran class=