Skip to content
Snippets Groups Projects
Commit 298c09cd authored by Dennis Eisold's avatar Dennis Eisold
Browse files

Überprüfung ob Stecker auf dem Steckbrett gesteckt werden dürfen. closes #8

parent e0480326
No related branches found
No related tags found
1 merge request!1Master
......@@ -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();
}
......
......@@ -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;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment