diff --git a/src/main/java/projekt/enigma/model/Codierer.java b/src/main/java/projekt/enigma/model/Codierer.java index 17b1fc5436d9364440c3fb1867f7e363e05e72ad..590ecf5ddb5f5c7dd500a76938ab2a31578c2858 100644 --- a/src/main/java/projekt/enigma/model/Codierer.java +++ b/src/main/java/projekt/enigma/model/Codierer.java @@ -470,12 +470,6 @@ public class Codierer { * Löscht das letzte Zeichen aus der Nachricht und dreht die Walzen eine Position zurück. */ public void letztesZeichenLoeschen() { - if (this.hardware.getWalzen()[2].dreheWalze(-1)) { - System.out.println("Drehe W2"); - if (this.hardware.getWalzen()[1].dreheWalze(-1)) { - System.out.println("Drehe W1"); - this.hardware.getWalzen()[0].dreheWalze(-1); - } - } + this.hardware.dreheWalzen(-1); } } diff --git a/src/main/java/projekt/enigma/model/Hardware.java b/src/main/java/projekt/enigma/model/Hardware.java index b37ddd166c98d2274e0722e401418c81d354bc16..58ac07827ed796bc9bfa9605f9b8c1bfe31dff84 100644 --- a/src/main/java/projekt/enigma/model/Hardware.java +++ b/src/main/java/projekt/enigma/model/Hardware.java @@ -67,7 +67,7 @@ public class Hardware { * @return char : Der ver/entschlüsselte Buchstabe */ public char codiere(char buchstabe) { - this.dreheWalzen(); + this.dreheWalzen(1); buchstabe = this.steckbrett.codiere(Character.toUpperCase(buchstabe)); buchstabe = this.walzen[2].codiere(buchstabe); @@ -86,10 +86,18 @@ public class Hardware { * Nach jeder codierung eines Buchstabens müssen die Walzen gedreht werden. * Hier überprüfen wir welche der Walzen gedreht werden müssen und stoßen die Vorgang an. */ - private void dreheWalzen() { - if (this.walzen[2].dreheWalze()) { - if (this.walzen[1].dreheWalze()) { - this.walzen[0].dreheWalze(); + public void dreheWalzen(int richtung) { + if (richtung > 0) { + for (int i = 0; i < richtung; i++) { + if (this.walzen[2].dreheWalze(1) && this.walzen[1].dreheWalze(1)) { + this.walzen[0].dreheWalze(1); + } + } + } else { + for (int i = 0; i > richtung; richtung++) { + if (this.walzen[2].dreheWalze(-1) && this.walzen[1].dreheWalze(-1)) { + this.walzen[0].dreheWalze(-1); + } } } } diff --git a/src/main/java/projekt/enigma/model/Walze.java b/src/main/java/projekt/enigma/model/Walze.java index e43959ff3db9498099139438511f3cf0f1244786..dc350df82d32fb2fbf2630501368c0409e6b2041 100644 --- a/src/main/java/projekt/enigma/model/Walze.java +++ b/src/main/java/projekt/enigma/model/Walze.java @@ -131,51 +131,30 @@ public class Walze { * <p> * Ueberprueft, ob der Umspringpunkt der Walze nach der Drehung erreicht wurde. * - * @param drehung : int[] : Anzahl der Drehungen + * @param richtung : int : 1 dreht die Walze weiter und -1 dreht sie einen Schritt zurück * @return checkRing : boolean : gibt true zurueck wenn der Umspringpunkt erreicht wurde * TODO: Doku */ - public boolean dreheWalze(int... drehung) { + public boolean dreheWalze(int richtung) { boolean checkRing = false; - int richtung = 1; - if (drehung.length > 0 && drehung[0] < 0) { - richtung = -1; - } + if (richtung == 1) { + Collections.rotate(Arrays.asList(this.walzeAlpha), richtung); + } else { + richtung = -1; + Collections.rotate(Arrays.asList(this.walzeAlpha), richtung); + } - // fuehrt die Verschiebung des Alphabets um eine Stelle durch - verschiebung(richtung); + System.out.printf("W: %s R: %s\n", this.getPosition(), this.ringstellung); - // fuehrt die Verschiebung mehrfach aus, wenn mehrere Drehungen ausgefuehrt werden sollen - if (drehung.length > 0) { - for (int i = 1; i < drehung[0]; i++) { - verschiebung(richtung); - } - } - - // gleicht die Ringstellung mit der aktuellen Position ab - if (this.getPosition().equals(this.ringstellung)) { + // gleicht die Ringstellung mit der aktuellen Position ab + if (this.getPosition() + 1 == this.ringstellung) { checkRing = true; } return checkRing; } - /** - * Ueberschreibt die Alphabetswalze mit dem, durch die Drehung, verschobenen Alphabet. - * - * @param richtung : int : Wenn "normal" gedreht werden soll, wird 1 übergeben, reverse entspricht dann -1 - * TODO: Dokumentieren - */ - private void verschiebung(int richtung) { - - if (richtung > 0) { - Collections.rotate(Arrays.asList(this.walzeAlpha), 1); - } else { - Collections.rotate(Arrays.asList(this.walzeAlpha), -1); - } - } - /** * TODO: Dokumentieren // dass selbe wie getPosition * Gibt den Buchstaben zurueck der in der Walze aktuell eingestellt ist.