From 298c09cdd7fd2928fde23eb352e6cac260db69ff Mon Sep 17 00:00:00 2001 From: Dennis Eisold <de@itstall.de> Date: Fri, 29 Nov 2019 19:35:38 +0100 Subject: [PATCH] =?UTF-8?q?=C3=9Cberpr=C3=BCfung=20ob=20Stecker=20auf=20de?= =?UTF-8?q?m=20Steckbrett=20gesteckt=20werden=20d=C3=BCrfen.=20closes=20#8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/projekt/enigma/model/Codierer.java | 28 +- .../java/projekt/enigma/model/Steckbrett.java | 241 ++++++++++-------- 2 files changed, 159 insertions(+), 110 deletions(-) diff --git a/src/main/java/projekt/enigma/model/Codierer.java b/src/main/java/projekt/enigma/model/Codierer.java index e2b6247..f62108e 100644 --- a/src/main/java/projekt/enigma/model/Codierer.java +++ b/src/main/java/projekt/enigma/model/Codierer.java @@ -406,25 +406,24 @@ public class Codierer { /** * Setzt das Kabel in beide Ports ein und fügt es dem Steckbrett Array hinzu. - * - * @param feldNr : int : Kabel Nummer welches am Steckbrett eingesteckt wird - * @param verbindung : String : Verbindung welche die vertauschten Buchstaben angibt + * @param port : int : Kabel Nummer welches am Steckbrett eingesteckt wird + * @param verbindung : String : Verbindung welche die vertauschten Buchstaben angibt + * @return */ - public void setSteckbrett(int feldNr, String verbindung) { - this.hardware.getSteckbrett().setzeVertauschung(verbindung.charAt(0), verbindung.charAt(1)); + public boolean setSteckbrett(int port, String verbindung) { + return this.hardware.getSteckbrett().setzeVertauschung(port, verbindung.charAt(0), verbindung.charAt(1)); } /** * Prüft ob der Port auf den das Kabel gesteckt werden soll, noch frei ist. * <p> - * TODO: Prüfen ob im aktuellen Feld bereits zwei Buchstaben stehen, wenn ja, nach erfolg dieser Funktion, * setSteckbrett ausführen mit beiden Buchstaben als String * * @param buchstabe : char : Der zuletzt eingegebene Buchstabe * @return boolean : Wenn der Buchstabe nicht vorhanden ist, wird true zurückgegeben, ansonsten false */ public boolean pruefeSteckbrettPort(char buchstabe) { - return true; + return this.hardware.getSteckbrett().ueberpruefeVertauschungen(buchstabe); } /** @@ -439,14 +438,29 @@ public class Codierer { return nachricht[2]; } + /** + * Gibt die Ringstellungen aus dem Codebuch zurück + * + * @return int[] : Array mit den Ringstellungen der drei eingesetzten Walzen + */ public int[] fetchRingstellung() { return this.codebuch.getRingstellung(); } + /** + * Gibt die Walzennummer aus dem Codebuch zurück + * + * @return int[] : Array mit den Nummern der drei eingesetzten Walzen + */ public int[] getchWalzenNr() { return this.codebuch.getWalzenlage(); } + /** + * Gibt die Steckverbindungen aus dem Codebuch zurück + * + * @return char[][] : Array mit den gesteckten Verbindungen im Steckbrett + */ public char[][] getSteckverbindungen() { return this.codebuch.getSteckverbindung(); } diff --git a/src/main/java/projekt/enigma/model/Steckbrett.java b/src/main/java/projekt/enigma/model/Steckbrett.java index b0ad4f4..f1fbfcb 100644 --- a/src/main/java/projekt/enigma/model/Steckbrett.java +++ b/src/main/java/projekt/enigma/model/Steckbrett.java @@ -9,108 +9,143 @@ package projekt.enigma.model; */ public class Steckbrett { - /** - * zaehler: Int, der als Laufvariable genutzt wird - */ - private int zaehler; - - /** - * orginalBuchstaben: Character-Array, der jeweils den ersten zu vertauschenden Buchstaben enthält - */ - private Character[] orginalBuchstaben; - - /** - * getauschteBuchstaben: Character-Array, der jeweils den zweiten zu vertauschenden Buchstaben enthält - */ - private Character[] getauschteBuchstaben; - - - /** - * Konstruktor Steckbrett - * <br> - * Erzeugt zwei Charakter-Arrays (orginalBuchstaben und getauschteBuchstaben) der Länge 10. - */ - public Steckbrett() { - - orginalBuchstaben = new Character[10]; - getauschteBuchstaben = new Character[10]; - } - - /** - * TODO: Fehlerfall kommentieren, bzw. Exceptions werfen ????? - * TODO: Überprüfe Vertauschungen für jeden Buchstaben aufrufen - * Funktion setzeVertauschung - * <br> - * Der Funktion setzeVertauschung werden 2 Buchstaben (buchstabe1 und buchstabe2) übergeben. - * buchstabe1 wird in das Character-Array orginalBuchstaben geschrieben. - * buchstabe2 wird in das Character-Array getauschteBuchstaben geschrieben. - * Anschließend wird die Funktion ueberpruefeVertauschungen aufgerufen. - * - * @param buchstabe1 : char: Gibt den ersten Buchstaben an, der getauscht werden soll. - * @param buchstabe2 : char: gibt den zweiten Buchstaben an, mit dem der erste getauscht werden soll. - * @return ueberpruefeVertauschungen(): Ueberprueft ob die Vertauschungen zulaessig sind. - */ - public boolean setzeVertauschung(char buchstabe1, char buchstabe2) { - if (zaehler < orginalBuchstaben.length) { - orginalBuchstaben[zaehler] = buchstabe1; - getauschteBuchstaben[zaehler++] = buchstabe2; - } else { - System.err.println("Zu viele Vertauschungen angegeben!"); - } - - return ueberpruefeVertauschungen(); - } - - /** - * TODO: Fehlerfall kommentieren, bzw. Exceptions werfen ????? - * TODO: Buchstabe zum überpüfen übergeben - * Funktion ueberpruefeVertauschungen - * <br> - * Die Funktion ueberpruefeVertauschungen prueft ob die Buchstabenvertauschung zulaessig ist. - * Eine Buchstabenvertauschung ist zulaessig, wenn keine Dopplungen der zu vertauschenden Buchstaben auftritt - * (ein Buchstabe nicht mehrmals vertauscht wird). - * - * @return boolean : result : Flag, der die Zulassigkeit der Vertauschungen zurueckgibt. - */ - public boolean ueberpruefeVertauschungen() { - boolean result = true; - - /*Es wird geprüft: - 1. Ob im Array originalBuchstaben Dopplungen enthalten sind. - 2. Ob im Array originalBuchstaben Buchstaben im Array getauschteBuchstaben enthalten sind. - 3. Ob im Array getauschteBuchstaben Dopplungen enthalten sind. - Tritt einer der Fälle ein, erfolgt eine Konsolenausgabe und der Flag wird auf false gesetzt. - */ - for (int n = 0; n < orginalBuchstaben.length; n++) { - if (orginalBuchstaben.equals(orginalBuchstaben[n]) || - getauschteBuchstaben.equals(orginalBuchstaben[n]) || - getauschteBuchstaben.equals(getauschteBuchstaben[n])) { - System.err.println("Vertauschungen enthalten unzulässige Dopplungen"); - result = false; - } - } - - return result; - } - - /** - * Funktion codiere - * <br> - * Die Funktion codiere tauscht den uebergebenen Character buchstabe mit dem zu tauschenden Character aus. - * - * @param buchstabe : Character : Buchstabe der codiert werden soll. - * @return buchstabe : Character : Codierter Buchstabe. - */ - public char codiere(Character buchstabe) { - for (int index = 0; index < getauschteBuchstaben.length; index++) { - if (buchstabe.equals(getauschteBuchstaben[index])) { - buchstabe = orginalBuchstaben[index]; - } else if (buchstabe.equals(orginalBuchstaben[index])) { - buchstabe = getauschteBuchstaben[index]; - } - } - - return buchstabe; - } + /** + * zaehler: Int, der als Laufvariable genutzt wird + */ + private int zaehler; + + /** + * orginalBuchstaben: Character-Array, der jeweils den ersten zu vertauschenden Buchstaben enthält + */ + private Character[] orginalBuchstaben; + + /** + * getauschteBuchstaben: Character-Array, der jeweils den zweiten zu vertauschenden Buchstaben enthält + */ + private Character[] getauschteBuchstaben; + + + /** + * Konstruktor Steckbrett + * <br> + * Erzeugt zwei Charakter-Arrays (orginalBuchstaben und getauschteBuchstaben) der Länge 10. + */ + public Steckbrett() { + + orginalBuchstaben = new Character[10]; + getauschteBuchstaben = new Character[10]; + } + + /** + * Funktion setzeVertauschung + * <br> + * Der Funktion setzeVertauschung werden 2 Buchstaben (buchstabe1 und buchstabe2) übergeben. + * Zuerst wird überprüft ob einer der beiden Buchstaben bereits enthalten ist, was unzulässig wäre. + * <br> + * Anschließend wird: + * <p> + * buchstabe1 in das Array orginalBuchstaben auf den nächsten, freien Index geschrieben + * buchstabe2 in das Array getauschteBuchstaben auf den nächsten, freien Index geschrieben. + * </p> + * + * @param buchstabe1 : char: Gibt den ersten Buchstaben an, der getauscht werden soll. + * @param buchstabe2 : char: gibt den zweiten Buchstaben an, mit dem der erste getauscht werden soll. + * @return boolean : Wenn die Vertauschung zulässig ist, true, ansonsten false + */ + public boolean setzeVertauschung(char buchstabe1, char buchstabe2) { + + if (!ueberpruefeVertauschungen(buchstabe1) && !ueberpruefeVertauschungen(buchstabe2)) { + return false; + } else { + if (zaehler < orginalBuchstaben.length) { + orginalBuchstaben[zaehler] = buchstabe1; + getauschteBuchstaben[zaehler++] = buchstabe2; + + return true; + } else { + return false; + } + } + } + + /** + * Funktion setzeVertauschung mit angabe eines Ports von 1 - 10 + * <br> + * Der Funktion setzeVertauschung werden 2 Buchstaben (buchstabe1 und buchstabe2) sowie der Port übergeben. + * Zuerst wird überprüft ob einer der beiden Buchstaben bereits enthalten ist, was unzulässig wäre. + * <br> + * Anschließend wird: + * <p> + * buchstabe1 in das Array orginalBuchstaben auf den Index (steckbrettPort) geschrieben + * buchstabe2 in das Array getauschteBuchstaben auf den Index (steckbrettPort) geschrieben. + * </p> + * + * @param buchstabe1 : char: Gibt den ersten Buchstaben an, der getauscht werden soll. + * @param buchstabe2 : char: gibt den zweiten Buchstaben an, mit dem der erste getauscht werden soll. + * @return boolean : Wenn die Vertauschung zulässig ist, true, ansonsten false + */ + public boolean setzeVertauschung(int steckbrettPort, char buchstabe1, char buchstabe2) { + + if (!ueberpruefeVertauschungen(buchstabe1) && !ueberpruefeVertauschungen(buchstabe2)) { + return false; + } else { + orginalBuchstaben[steckbrettPort - 1] = buchstabe1; + getauschteBuchstaben[steckbrettPort - 1] = buchstabe2; + + return true; + } + + } + + /** + * Funktion ueberpruefeVertauschungen + * <br> + * Die Funktion ueberpruefeVertauschungen prueft ob der übergebene Buchstabe bereits in den beiden Arrays + * (orginalBuchstaben) und (getauschteBuchstaben) vorhanden ist. + * Eine Buchstabenvertauschung ist zulaessig, wenn keine Dopplungen der zu vertauschenden Buchstaben auftritt + * (ein Buchstabe nicht mehrmals vertauscht wird). + * + * @return boolean : Wenn false, dann darf der Buchstabe genutzt werden. + * Wenn er schon vorhanden ist, wird true zurück gegeben + */ + public boolean ueberpruefeVertauschungen(char buchstabe) { + + boolean result = false; + + for (char c : orginalBuchstaben) { + if (c == buchstabe) { + result = true; + break; + } + } + for (char c : getauschteBuchstaben) { + if (c == buchstabe) { + result = true; + break; + } + } + + return result; + } + + /** + * Funktion codiere + * <br> + * Die Funktion codiere tauscht den uebergebenen Character buchstabe mit dem zu tauschenden Character aus. + * + * @param buchstabe : Character : Buchstabe der codiert werden soll. + * @return buchstabe : Character : Codierter Buchstabe. + */ + public char codiere(Character buchstabe) { + for (int index = 0; index < getauschteBuchstaben.length; index++) { + if (buchstabe.equals(getauschteBuchstaben[index])) { + buchstabe = orginalBuchstaben[index]; + } else if (buchstabe.equals(orginalBuchstaben[index])) { + buchstabe = getauschteBuchstaben[index]; + } + } + + return buchstabe; + } } -- GitLab