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