diff --git a/src/main/java/Enigma/model/Steckbrett.java b/src/main/java/Enigma/model/Steckbrett.java new file mode 100644 index 0000000000000000000000000000000000000000..804c20328c2f1c9740bf7563a0e1133394e027f3 --- /dev/null +++ b/src/main/java/Enigma/model/Steckbrett.java @@ -0,0 +1,61 @@ +package Enigma.model; + +public class Steckbrett { + + private final Character[] WALZE_ALPHABET = {'A','B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; + private Character buchstabeEins; + private Character buchstabeZwei; + private int iPositionEins; + private int iPositionZwei; + + public Character getBuchstabeEins() { + return buchstabeEins; + } + + public void setBuchstabeEins(Character buchstabeEins) { + this.buchstabeEins = buchstabeEins; + } + + public Character getBuchstabeZwei() { + return buchstabeZwei; + } + + public void setBuchstabeZwei(Character buchstabeZwei) { + this.buchstabeZwei = buchstabeZwei; + } + + + + public char vertauscheBuchstaben(){ + /*Variable um Index zu speichern*/ + int indexA = 0; + int indexB = 0; + + /*Ermittelt die Position des Buchstaben buchstabeEins auf der Alphabetswalze*/ + for(indexA = 0; indexA < WALZE_ALPHABET.length; indexA++) { + if(getBuchstabeEins().equals(WALZE_ALPHABET[index])) { + iPositionEins = index; + break; + } + } + + /*Ermittelt die Position des Buchstaben buchstabeZwei auf der Alphabetswalze*/ + for(indexA = 0; index < WALZE_ALPHABET.length; index++) { + if(getBuchstabeEins().equals(WALZE_ALPHABET[index])) { + iPositionEins = index; + break; + } + } + + + /*Im Char-Array WALZE_REFLEKTOR wird der Character an der Position iPositionReflektor ausgegeben*/ + reflektorBuchstabeRaus = WALZE_REFLEKTOR[iPositionReflektor]; + return reflektorBuchstabeRaus; + + + + + + return 0; + } +} diff --git a/src/main/java/Enigma/model/Walze.java b/src/main/java/Enigma/model/Walze.java index 9ad536e3a3a67ec8f1f75500d4c66799aa893614..886b1cb3158e84b0f5a293c60f07f3aa4ffa96b1 100644 --- a/src/main/java/Enigma/model/Walze.java +++ b/src/main/java/Enigma/model/Walze.java @@ -1,7 +1,31 @@ package Enigma.model; +/** + * Klasse Walze + * + * Erzeugt ein Objekt des Typs Walze mit den Eigenschaften: + * + * 1. Walzennummer (Die Walze enthält die 26 Buchstaben des Alphabeths und codiert diese. + * 5 verschiedene Walzen stehen zur Auswahl, die jeweils verschieden die Buchstaben des Alphabeths + * paarweise vertauschen) + * + * 2. Ringstellung (Umspringpunkt der Walze wird festgelegt. Der Umspringpunkt bestimmt + * den Drehzeitpunkt der linken Nachbarwalze) + * + */ public class Walze { + /** + * Konstanten und Variablen der Klasse Walze + * + * buchstabe : Bestimmt den Buchstaben + * ringstellung : Bestimmt den Umspringpunkt der Walze + * walzennr : Bestimmt die Walzennr. (also wie der Buchstabe codiert wird) + * iPositionBuchstabe : gibt die Position des Buchstabens auf dem Array der Walze wieder. + * iPositionBuchstabeRe : gibt die Position des codierten Buchstabens im Alphabet wieder. + * private Character[] walze : Character-Array der Walze + */ + private Character buchstabe; private Character ringstellung; private int walzennr; @@ -13,83 +37,15 @@ public class Walze { * Gibt die Parameter der Walze mit * * @param walzennr : int : Nummer der gewaehlten Walze - * @param buchstabe : Character : Grundeinstellung der Walze * @param ringstellung : Character : Einstellung des Notch */ - public Walze(int walzennr, Character buchstabe, Character ringstellung) { + public Walze(int walzennr, Character ringstellung) { this.walze = new Character[25]; this.walzennr = walzennr; - this.buchstabe = buchstabe; + this.buchstabe = 'A'; this.ringstellung = ringstellung; } - /** - * @return buchstabe : Character : gibt den neuen Buchstaben zurueck - */ - public Character getBuchstabe() { - return buchstabe; - } - - /** - * Gibt die Grundeinstellung der Walze ein. Nur Buchstaben von A - Z sind zugelassen. - * Buchstaben werden automatisch in Grossbuchstaben umgewandelt. - * Im Fehlerfall wird die Grundeinstellung der Walze standardmaessig auf 'A' gesetzt. - * - * @param buchstabe : Character : Grundeinstellung der Walze - */ - public void setBuchstabe(Character buchstabe) { - - if(Character.isLetter(buchstabe)) { - this.buchstabe = Character.toUpperCase(buchstabe); - } else { - this.buchstabe = 'A'; - } - } - - /** - * @return ringstellung : Character : gibt die neue Ringstellung zurueck - */ - public Character getRingstellung() { - return ringstellung; - } - - - /** - * Gibt die Initiale Ringstellung der Walze an. - * Es sind nur Zahlen von 1 - 26 zugelassen. - * Im Fehlerfall wird die Ringstellung standardmaessig auf '1' gesetzt. - * - * @param ringstellung : Character : Punkt an dem die Walze umspringt - */ - public void setRingstellung(Character ringstellung) { - - if(Character.isDigit(ringstellung) && ringstellung > 0 && ringstellung <= 26) { - this.ringstellung = ringstellung; - } else { - this.ringstellung = '1'; - } - } - - /** - * @return walzennr : int : gibt die Walzennummer zurueck - */ - public int getWalzennr() { - return walzennr; - } - - /** - * Definiert die Walze. Es stehen fuenf Walze zur Auswahl. - * - * @param walzennr : int : setzt die Walzennummer - */ - public void setWalzennr(int walzennr) { - if(walzennr > 0 && walzennr < 6) { - this.walzennr = walzennr; - } else { - System.err.println("Keine gültige Walzennummer"); - } - } - /** * Sortiert den Walzennummern das passenden Character-Array mittels switch zu. * @@ -104,7 +60,7 @@ public class Walze { Character[] walzeVier = {'E', 'S', 'O', 'V', 'P', 'Z', 'J', 'A', 'Y', 'Q', 'U', 'I', 'R', 'H', 'X', 'L', 'N', 'F', 'T', 'G', 'K', 'D', 'C', 'M', 'W', 'B'}; Character[] walzeFuenf = {'V', 'Z', 'B', 'R', 'G', 'I', 'T', 'Y', 'U', 'P', 'S', 'D', 'N', 'H', 'L', 'X', 'A', 'W', 'M', 'J', 'Q', 'O', 'F', 'E', 'C', 'K'}; - switch (getWalzennr()) { + switch (walzennr) { case 1: walze = walzeEins; break; @@ -125,29 +81,80 @@ public class Walze { return walze; } - /** - * Ermittelt die Position des Buchstaben auf der Alphabetswalze, um die Position mit - * der Chiffrierung auf der gewaehlten Walze abgleichen zu koennen. - * - * @return iPositionBuchstabe : int : Position des Buchstaben im Array - */ - public int positionBuchstabe() { + + + //walzenPosition() return int => Gibt die aktuelle Position des Buchstabens zurück + public int walzenPosition() { /*Alphabetswalze*/ - Character[] walzeAlpha = {'A','B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; + Character[] walzeAlphabeth = {'A','B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; /*Ermittelt die Position des Buchstaben buchstabe auf der Alphabetswalze*/ - for(int index = 0; index < walzeAlpha.length; index++) { - if(getBuchstabe().equals(walzeAlpha[index])) { + for(int index = 0; index < walzeAlphabeth.length; index++) { + if(getBuchstabe().equals(walzeAlphabeth[index])) { iPositionBuchstabe = index; break; } } - return iPositionBuchstabe; } + //setzeNotch(int position) => Setze Startpunkt auf int Position des Buchstabens + // Setter für Ringstellung + /** + * Gibt die Initiale Ringstellung der Walze an. + * Es sind nur Zahlen von 1 - 26 zugelassen. + * Im Fehlerfall wird die Ringstellung standardmaessig auf '1' gesetzt. + * + * @param ringstellung : Character : Punkt an dem die Walze umspringt + */ + public void setRingstellung(Character ringstellung) { + + if(Character.isDigit(ringstellung) && ringstellung > 0 && ringstellung <= 26) { + this.ringstellung = ringstellung; + } else { + this.ringstellung = '1'; + } + } + + /** + * @return ringstellung : Character : gibt die neue Ringstellung zurueck + */ + public Character getRingstellung() { + return ringstellung; + } + + + + //dreheWalze() return boolean => Wenn Notch erreicht, gib true zurück, ansonsten false + public boolean dreheWalze(){ + + boolean checkRing; + + if(iPositionBuchstabe == 25) { + + iPositionBuchstabe = 0; + + } else { + + iPositionBuchstabe += 1; + } + + if (iPositionBuchstabe == getRingstellung()){ + + checkRing = true; + + }else{ + + checkRing = false; + } + + return checkRing; + } + + + //codiere(char buchstabe) return char => Gibt den verschlüsselten Buchstaben zurück /** * Chiffriert den Buchstaben an der Position aus der Methode positionBuchstabe() * anhand der gewaehlten Walze. @@ -156,64 +163,83 @@ public class Walze { * @param walze : Character[] : ausgewaehlte Walze * @return chiffrierterBuchstabe : Character : chiffrierter Buchstabe */ - public Character codiereBuchstabe(int iPositionBuchstabe, Character[] walze) { - Character codierterBuchstabe = walze[iPositionBuchstabe]; + public Character codiere(Character buchstabe) { + setBuchstabe(buchstabe); + walzenPosition(); + Character codierterBuchstabe = walzenNummer()[iPositionBuchstabe]; return codierterBuchstabe; } + //codiere2(char buchstabe) => Gibt den vertauschten Buchstaben zurück (Reverse) /** - * Nimmt die Startposition, die aus der Walzeneinstellung geholt wird und - * erhoeht sie um eins. - * Die Variable wird ueberschrieben und zaehlt von nun an die Position mit. - * Ab Position 25 wird wieder bei 0 angefangen. + * Chiffriert den Buchstaben an der Position aus der Methode positionBuchstabeReverse() + * anhand der AlphaWalze. * - * @param iPositionBuchstabe : int : alte Position der Walze - * @return iPositionBuchstabe : int : neue Position der Walze + * @param iPositionBuchstabeRe : int : Position des zu chiffrierenden Buchstabens + * @return codierterBuchstabeRe : Character : chiffrierter Buchstabe */ - public int vorstellenDerWalze(int iPositionBuchstabe) { + public Character codiere2(char buchstabe) { - if(iPositionBuchstabe == 25) { - iPositionBuchstabe = 0; - } else { - iPositionBuchstabe += 1; + /*Alphawalze*/ + Character[] walzeAlpha = {'A','B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; + + setBuchstabe(buchstabe); + + /*Ermittelt die Position des Buchstaben buchstabe auf der Alphabetswalze*/ + for(int index = 0; index < walzenNummer().length; index++) { + if(getBuchstabe().equals(walzenNummer()[index])) { + iPositionBuchstabeRe = index; + break; + } } - return iPositionBuchstabe; + Character codierterBuchstabeRe = walzeAlpha[iPositionBuchstabeRe]; + return codierterBuchstabeRe; + + + } + +//_________________________________________________________________________________________ + + + /** + * @return buchstabe : Character : gibt den neuen Buchstaben zurueck + */ + public Character getBuchstabe() { + return buchstabe; } /** - * Ermittelt die Position des Buchstaben auf der gewaehlten Walze, um die Position mit - * der Chiffrierung auf der AlphaWalze abgleichen zu koennen. + * Gibt die Grundeinstellung der Walze ein. Nur Buchstaben von A - Z sind zugelassen. + * Buchstaben werden automatisch in Grossbuchstaben umgewandelt. + * Im Fehlerfall wird die Grundeinstellung der Walze standardmaessig auf 'A' gesetzt. * - * @param walzennr : int : gibt die gewaehlte Walze zurueck - * @return iPositionBuchstabeRe : int : Position des Buchstaben im Array + * @param buchstabe : Character : Grundeinstellung der Walze */ - public int positionBuchstabeReverse(int walzennr) { + public void setBuchstabe(Character buchstabe) { - /*Ermittelt die Position des Buchstaben buchstabe auf der Alphabetswalze*/ - for(int index = 0; index < walze.length; index++) { - if(getBuchstabe().equals(walze[index])) { - iPositionBuchstabeRe = index; - break; - } + if(Character.isLetter(buchstabe)) { + this.buchstabe = Character.toUpperCase(buchstabe); + } else { + this.buchstabe = 'A'; } - return iPositionBuchstabeRe; } + + //TODO: ??? Brauchen wir Setter, wo findet Überprüfung der Walzennr. statt. /** - * Chiffriert den Buchstaben an der Position aus der Methode positionBuchstabeReverse() - * anhand der AlphaWalze. + * Definiert die Walze. Es stehen fuenf Walze zur Auswahl. * - * @param iPositionBuchstabeRe : int : Position des zu chiffrierenden Buchstabens - * @return codierterBuchstabeRe : Character : chiffrierter Buchstabe + * @param walzennr : int : setzt die Walzennummer */ - public Character codierterBuchstabeReverse(int iPositionBuchstabeRe) { - /*Alphawalze*/ - Character[] walzeAlpha = {'A','B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; - - Character codierterBuchstabeRe = walzeAlpha[iPositionBuchstabeRe]; - return codierterBuchstabeRe; + public void setWalzennr(int walzennr) { + if(walzennr > 0 && walzennr < 6) { + this.walzennr = walzennr; + } else { + System.err.println("Keine gültige Walzennummer"); + } } + }