import java.util.Scanner; // Needed for Scanner class import java.io.*; // Needed for file classes public class KeyStream{ private int[] keys; private int[] cards; public KeyStream(int lengthOfMessage) throws IOException { cards = new int[28]; Scanner keyboard = new Scanner(System.in); System.out.println("Enter file name of deck of cards:"); String fileName = keyboard.nextLine(); FileReader freader = new FileReader(fileName); BufferedReader inputFile = new BufferedReader(freader); //System.out.println(Integer.parseInt(inputFile.readLine())); cards[0] = Integer.parseInt(inputFile.readLine()); cards[1] = Integer.parseInt(inputFile.readLine()); cards[2] = Integer.parseInt(inputFile.readLine()); cards[3] = Integer.parseInt(inputFile.readLine()); cards[4] = Integer.parseInt(inputFile.readLine()); cards[5] = Integer.parseInt(inputFile.readLine()); cards[6] = Integer.parseInt(inputFile.readLine()); cards[7] = Integer.parseInt(inputFile.readLine()); cards[8] = Integer.parseInt(inputFile.readLine()); cards[9] = Integer.parseInt(inputFile.readLine()); cards[10] = Integer.parseInt(inputFile.readLine()); cards[11] = Integer.parseInt(inputFile.readLine()); cards[12] = Integer.parseInt(inputFile.readLine()); cards[13] = Integer.parseInt(inputFile.readLine()); cards[14] = Integer.parseInt(inputFile.readLine()); cards[15] = Integer.parseInt(inputFile.readLine()); cards[16] = Integer.parseInt(inputFile.readLine()); cards[17] = Integer.parseInt(inputFile.readLine()); cards[18] = Integer.parseInt(inputFile.readLine()); cards[19] = Integer.parseInt(inputFile.readLine()); cards[20] = Integer.parseInt(inputFile.readLine()); cards[21] = Integer.parseInt(inputFile.readLine()); cards[22] = Integer.parseInt(inputFile.readLine()); cards[23] = Integer.parseInt(inputFile.readLine()); cards[24] = Integer.parseInt(inputFile.readLine()); cards[25] = Integer.parseInt(inputFile.readLine()); cards[26] = Integer.parseInt(inputFile.readLine()); cards[27] = Integer.parseInt(inputFile.readLine()); inputFile.close(); keys = new int[lengthOfMessage]; //allocate memory for the cards //prompt the user for the name of the file containing //the deck of cards (created by the Deck class). //read the cards from this file into the cards[] array. //allocate memory for the keys[] array (remember its size //is determined by the message’s length). //generate the keys. } public void swapJokerA() { //step 1 in manipulating cards[] array. int cardHolder = 0; if(cards[0] == 27) { cardHolder = cards[1]; cards[1] = cards[0]; cards[0] = cardHolder; } else if(cards[1] == 27) { cardHolder = cards[2]; cards[2] = cards[1]; cards[1] = cardHolder; } else if(cards[2] == 27) { cardHolder = cards[3]; cards[3] = cards[2]; cards[2] = cardHolder; } else if(cards[3] == 27) { cardHolder = cards[4]; cards[4] = cards[3]; cards[3] = cardHolder; } else if(cards[4] == 27) { cardHolder = cards[5]; cards[5] = cards[4]; cards[4] = cardHolder; } else if(cards[5] == 27) { cardHolder = cards[6]; cards[6] = cards[5]; cards[5] = cardHolder; } else if(cards[6] == 27) { cardHolder = cards[7]; cards[7] = cards[6]; cards[6] = cardHolder; } else if(cards[7] == 27) { cardHolder = cards[8]; cards[8] = cards[7]; cards[7] = cardHolder; } else if(cards[8] == 27) { cardHolder = cards[9]; cards[9] = cards[8]; cards[8] = cardHolder; } else if(cards[9] == 27) { cardHolder = cards[10]; cards[10] = cards[9]; cards[9] = cardHolder; } else if(cards[10] == 27) { cardHolder = cards[11]; cards[11] = cards[10]; cards[10] = cardHolder; } else if(cards[11] == 27) { cardHolder = cards[12]; cards[12] = cards[11]; cards[11] = cardHolder; } else if(cards[12] == 27) { cardHolder = cards[13]; cards[13] = cards[12]; cards[12] = cardHolder; } else if(cards[13] == 27) { cardHolder = cards[14]; cards[14] = cards[13]; cards[13] = cardHolder; } else if(cards[14] == 27) { cardHolder = cards[15]; cards[15] = cards[14]; cards[14] = cardHolder; } else if(cards[15] == 27) { cardHolder = cards[16]; cards[16] = cards[15]; cards[15] = cardHolder; } else if(cards[16] == 27) { cardHolder = cards[17]; cards[17] = cards[16]; cards[16] = cardHolder; } else if(cards[17] == 27) { cardHolder = cards[18]; cards[18] = cards[17]; cards[17] = cardHolder; } else if(cards[18] == 27) { cardHolder = cards[19]; cards[19] = cards[18]; cards[18] = cardHolder; } else if(cards[19] == 27) { cardHolder = cards[20]; cards[20] = cards[19]; cards[19] = cardHolder; } else if(cards[20] == 27) { cardHolder = cards[21]; cards[21] = cards[20]; cards[20] = cardHolder; } else if(cards[21] == 27) { cardHolder = cards[22]; cards[22] = cards[21]; cards[21] = cardHolder; } else if(cards[22] == 27) { cardHolder = cards[23]; cards[23] = cards[22]; cards[22] = cardHolder; } else if(cards[23] == 27) { cardHolder = cards[24]; cards[24] = cards[23]; cards[23] = cardHolder; } else if(cards[24] == 27) { cardHolder = cards[25]; cards[25] = cards[24]; cards[24] = cardHolder; } else if(cards[25] == 27) { cardHolder = cards[26]; cards[25] = cards[25]; cards[25] = cardHolder; } else if(cards[26] == 27) { cardHolder = cards[27]; cards[27] = cards[26]; cards[26] = cardHolder; } else { cardHolder = cards[0]; cards[0] = cards[27]; cards[27] = cardHolder; } } public void moveJokerB(){ //step 2 in manipulating cards[] array. int cardHolder1 = 0; int cardHolder2 = 0; if(cards[0] == 28) { cardHolder1 = cards[1]; cardHolder2 = cards[2]; cards[2] = cards[0]; cards[1] = cardHolder2; cards[0] = cardHolder1; } else if(cards[1] == 28) { cardHolder1 = cards[2]; cardHolder2 = cards[3]; cards[3] = cards[1]; cards[2] = cardHolder2; cards[1] = cardHolder1; } else if(cards[2] == 28) { cardHolder1 = cards[3]; cardHolder2 = cards[4]; cards[4] = cards[2]; cards[3] = cardHolder2; cards[2] = cardHolder1; } else if(cards[3] == 28) { cardHolder1 = cards[4]; cardHolder2 = cards[5]; cards[5] = cards[3]; cards[4] = cardHolder2; cards[3] = cardHolder1; } else if(cards[4] == 28) { cardHolder1 = cards[5]; cardHolder2 = cards[6]; cards[6] = cards[4]; cards[5] = cardHolder2; cards[4] = cardHolder1; } else if(cards[5] == 28) { cardHolder1 = cards[6]; cardHolder2 = cards[7]; cards[7] = cards[5]; cards[6] = cardHolder2; cards[5] = cardHolder1; } else if(cards[6] == 28) { cardHolder1 = cards[7]; cardHolder2 = cards[8]; cards[8] = cards[6]; cards[7] = cardHolder2; cards[6] = cardHolder1; } else if(cards[7] == 28) { cardHolder1 = cards[8]; cardHolder2 = cards[9]; cards[9] = cards[7]; cards[8] = cardHolder2; cards[7] = cardHolder1; } else if(cards[8] == 28) { cardHolder1 = cards[9]; cardHolder2 = cards[10]; cards[10] = cards[8]; cards[9] = cardHolder2; cards[8] = cardHolder1; } else if(cards[9] == 28) { cardHolder1 = cards[10]; cardHolder2 = cards[11]; cards[11] = cards[9]; cards[10] = cardHolder2; cards[9] = cardHolder1; } else if(cards[10] == 28) { cardHolder1 = cards[11]; cardHolder2 = cards[12]; cards[12] = cards[10]; cards[11] = cardHolder2; cards[10] = cardHolder1; } else if(cards[11] == 28) { cardHolder1 = cards[12]; cardHolder2 = cards[13]; cards[13] = cards[11]; cards[12] = cardHolder2; cards[11] = cardHolder1; } else if(cards[12] == 28) { cardHolder1 = cards[13]; cardHolder2 = cards[14]; cards[14] = cards[12]; cards[13] = cardHolder2; cards[12] = cardHolder1; } else if(cards[13] == 28) { cardHolder1 = cards[14]; cardHolder2 = cards[15]; cards[15] = cards[13]; cards[14] = cardHolder2; cards[13] = cardHolder1; } else if(cards[14] == 28) { cardHolder1 = cards[15]; cardHolder2 = cards[16]; cards[16] = cards[14]; cards[15] = cardHolder2; cards[14] = cardHolder1; } else if(cards[15] == 28) { cardHolder1 = cards[16]; cardHolder2 = cards[17]; cards[17] = cards[15]; cards[16] = cardHolder2; cards[15] = cardHolder1; } else if(cards[16] == 28) { cardHolder1 = cards[17]; cardHolder2 = cards[18]; cards[18] = cards[16]; cards[17] = cardHolder2; cards[16] = cardHolder1; } else if(cards[17] == 28) { cardHolder1 = cards[18]; cardHolder2 = cards[19]; cards[19] = cards[17]; cards[18] = cardHolder2; cards[17] = cardHolder1; } else if(cards[18] == 28) { cardHolder1 = cards[19]; cardHolder2 = cards[20]; cards[20] = cards[18]; cards[19] = cardHolder2; cards[18] = cardHolder1; } else if(cards[19] == 28) { cardHolder1 = cards[20]; cardHolder2 = cards[21]; cards[21] = cards[19]; cards[20] = cardHolder2; cards[19] = cardHolder1; } else if(cards[20] == 28) { cardHolder1 = cards[21]; cardHolder2 = cards[22]; cards[22] = cards[20]; cards[21] = cardHolder2; cards[20] = cardHolder1; } else if(cards[22] == 28) { cardHolder1 = cards[23]; cardHolder2 = cards[24]; cards[24] = cards[22]; cards[23] = cardHolder2; cards[22] = cardHolder1; } else if(cards[23] == 28) { cardHolder1 = cards[24]; cardHolder2 = cards[25]; cards[25] = cards[23]; cards[24] = cardHolder2; cards[23] = cardHolder1; } else if(cards[24] == 28) { cardHolder1 = cards[25]; cardHolder2 = cards[26]; cards[26] = cards[24]; cards[25] = cardHolder2; cards[24] = cardHolder1; } else if(cards[25] == 28) { cardHolder1 = cards[26]; cardHolder2 = cards[27]; cards[27] = cards[25]; cards[26] = cardHolder2; cards[25] = cardHolder1; } else if(cards[26] == 28) { cardHolder1 = cards[27]; cardHolder2 = cards[0]; cards[0] = cards[26]; cards[27] = cardHolder2; cards[26] = cardHolder1; } else { cardHolder1 = cards[0]; cardHolder2 = cards[1]; cards[1] = cards[27]; cards[0] = cardHolder2; cards[27] = cardHolder1; } } public void tripleCut(){ //step 3 in manipulating cards[] array. int jokerA = find(27); int jokerB = find(28); int[] cardHolder1 = new int[28]; int[] cardHolder2 = new int[28]; int[] cardHolder3 = new int[28]; int cardCount5 = 0; int cardCount6 = 0; int joker1 = 0; int joker2 = 0; if(jokerA < jokerB) { joker1 = jokerA; joker2 = jokerB; } else { joker1 = jokerB; joker2 = jokerA; } for(int cardCount1 = (joker1 + 1); cardCount1 < joker2; cardCount1++) { cardHolder1[cardCount1] = cards[cardCount1]; } for(int cardCount2 = 0; cardCount2 < joker1; cardCount2++) { cardHolder2[cardCount2] = cards[cardCount2]; } for(int cardCount3 = 27; cardCount3 > joker2; cardCount3--) { cardHolder3[cardCount3] = cards[cardCount3]; } for(int cardCount4 = (joker2 + 1); cardCount4 <= 27; cardCount4++) { cards[cardCount5] = cardHolder3[cardCount4]; cardCount5++; } if(joker1 == jokerA) { cards[cardCount5] = 27; cardCount5++; } else { cards[cardCount5] = 28; cardCount5++; } for(; cardCount5 < joker2; cardCount5++) { cards[cardCount5] = cardHolder1[(joker1 + 1 + cardCount5)]; } if(joker2 == jokerA) { cardCount5++; cards[cardCount5] = 27; cardCount5++; } else { cardCount5++; cards[cardCount5] = 28; cardCount5++; } for(; cardCount5 <= 27; cardCount5++) { cards[cardCount5] = cardHolder2[cardCount6]; cardCount6++; } } public void moveBeforeLast(){ //step 4 manipulating cards[] array. } public int getNextKey(){ //this is step 5 //return the key[first card] return 1; } public void generateKeys(){ swapJokerA(); moveJokerB(); tripleCut(); moveBeforeLast(); getNextKey();//fill the keys[] array with as many keys as there are letters //in the message. Execute five steps per key. } /* public int[] getAllKeys(){ //return a reference to the keys[] array } */ private void printCards(){ //may be useful in debugging for(int k=0; k