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

Merge branch 'master' into 'master'

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

Closes #8

See merge request alfatrainingkurse/java/enigma!54
parents 1badaab5 298c09cd
No related branches found
No related tags found
No related merge requests found
...@@ -406,25 +406,24 @@ public class Codierer { ...@@ -406,25 +406,24 @@ public class Codierer {
/** /**
* Setzt das Kabel in beide Ports ein und fügt es dem Steckbrett Array hinzu. * Setzt das Kabel in beide Ports ein und fügt es dem Steckbrett Array hinzu.
* * @param port : int : Kabel Nummer welches am Steckbrett eingesteckt wird
* @param feldNr : int : Kabel Nummer welches am Steckbrett eingesteckt wird * @param verbindung : String : Verbindung welche die vertauschten Buchstaben angibt
* @param verbindung : String : Verbindung welche die vertauschten Buchstaben angibt * @return
*/ */
public void setSteckbrett(int feldNr, String verbindung) { public boolean setSteckbrett(int port, String verbindung) {
this.hardware.getSteckbrett().setzeVertauschung(verbindung.charAt(0), verbindung.charAt(1)); 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. * Prüft ob der Port auf den das Kabel gesteckt werden soll, noch frei ist.
* <p> * <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 * setSteckbrett ausführen mit beiden Buchstaben als String
* *
* @param buchstabe : char : Der zuletzt eingegebene Buchstabe * @param buchstabe : char : Der zuletzt eingegebene Buchstabe
* @return boolean : Wenn der Buchstabe nicht vorhanden ist, wird true zurückgegeben, ansonsten false * @return boolean : Wenn der Buchstabe nicht vorhanden ist, wird true zurückgegeben, ansonsten false
*/ */
public boolean pruefeSteckbrettPort(char buchstabe) { public boolean pruefeSteckbrettPort(char buchstabe) {
return true; return this.hardware.getSteckbrett().ueberpruefeVertauschungen(buchstabe);
} }
/** /**
...@@ -439,14 +438,29 @@ public class Codierer { ...@@ -439,14 +438,29 @@ public class Codierer {
return nachricht[2]; return nachricht[2];
} }
/**
* Gibt die Ringstellungen aus dem Codebuch zurück
*
* @return int[] : Array mit den Ringstellungen der drei eingesetzten Walzen
*/
public int[] fetchRingstellung() { public int[] fetchRingstellung() {
return this.codebuch.getRingstellung(); 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() { public int[] getchWalzenNr() {
return this.codebuch.getWalzenlage(); return this.codebuch.getWalzenlage();
} }
/**
* Gibt die Steckverbindungen aus dem Codebuch zurück
*
* @return char[][] : Array mit den gesteckten Verbindungen im Steckbrett
*/
public char[][] getSteckverbindungen() { public char[][] getSteckverbindungen() {
return this.codebuch.getSteckverbindung(); return this.codebuch.getSteckverbindung();
} }
......
...@@ -9,108 +9,143 @@ package projekt.enigma.model; ...@@ -9,108 +9,143 @@ package projekt.enigma.model;
*/ */
public class Steckbrett { public class Steckbrett {
/** /**
* zaehler: Int, der als Laufvariable genutzt wird * zaehler: Int, der als Laufvariable genutzt wird
*/ */
private int zaehler; private int zaehler;
/** /**
* orginalBuchstaben: Character-Array, der jeweils den ersten zu vertauschenden Buchstaben enthält * orginalBuchstaben: Character-Array, der jeweils den ersten zu vertauschenden Buchstaben enthält
*/ */
private Character[] orginalBuchstaben; private Character[] orginalBuchstaben;
/** /**
* getauschteBuchstaben: Character-Array, der jeweils den zweiten zu vertauschenden Buchstaben enthält * getauschteBuchstaben: Character-Array, der jeweils den zweiten zu vertauschenden Buchstaben enthält
*/ */
private Character[] getauschteBuchstaben; private Character[] getauschteBuchstaben;
/** /**
* Konstruktor Steckbrett * Konstruktor Steckbrett
* <br> * <br>
* Erzeugt zwei Charakter-Arrays (orginalBuchstaben und getauschteBuchstaben) der Länge 10. * Erzeugt zwei Charakter-Arrays (orginalBuchstaben und getauschteBuchstaben) der Länge 10.
*/ */
public Steckbrett() { public Steckbrett() {
orginalBuchstaben = new Character[10]; orginalBuchstaben = new Character[10];
getauschteBuchstaben = new Character[10]; getauschteBuchstaben = new Character[10];
} }
/** /**
* TODO: Fehlerfall kommentieren, bzw. Exceptions werfen ????? * Funktion setzeVertauschung
* TODO: Überprüfe Vertauschungen für jeden Buchstaben aufrufen * <br>
* Funktion setzeVertauschung * Der Funktion setzeVertauschung werden 2 Buchstaben (buchstabe1 und buchstabe2) übergeben.
* <br> * Zuerst wird überprüft ob einer der beiden Buchstaben bereits enthalten ist, was unzulässig wäre.
* Der Funktion setzeVertauschung werden 2 Buchstaben (buchstabe1 und buchstabe2) übergeben. * <br>
* buchstabe1 wird in das Character-Array orginalBuchstaben geschrieben. * Anschließend wird:
* buchstabe2 wird in das Character-Array getauschteBuchstaben geschrieben. * <p>
* Anschließend wird die Funktion ueberpruefeVertauschungen aufgerufen. * buchstabe1 in das Array orginalBuchstaben auf den nächsten, freien Index geschrieben
* * buchstabe2 in das Array getauschteBuchstaben auf den nächsten, freien Index geschrieben.
* @param buchstabe1 : char: Gibt den ersten Buchstaben an, der getauscht werden soll. * </p>
* @param buchstabe2 : char: gibt den zweiten Buchstaben an, mit dem der erste getauscht werden soll. *
* @return ueberpruefeVertauschungen(): Ueberprueft ob die Vertauschungen zulaessig sind. * @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.
public boolean setzeVertauschung(char buchstabe1, char buchstabe2) { * @return boolean : Wenn die Vertauschung zulässig ist, true, ansonsten false
if (zaehler < orginalBuchstaben.length) { */
orginalBuchstaben[zaehler] = buchstabe1; public boolean setzeVertauschung(char buchstabe1, char buchstabe2) {
getauschteBuchstaben[zaehler++] = buchstabe2;
} else { if (!ueberpruefeVertauschungen(buchstabe1) && !ueberpruefeVertauschungen(buchstabe2)) {
System.err.println("Zu viele Vertauschungen angegeben!"); return false;
} } else {
if (zaehler < orginalBuchstaben.length) {
return ueberpruefeVertauschungen(); orginalBuchstaben[zaehler] = buchstabe1;
} getauschteBuchstaben[zaehler++] = buchstabe2;
/** return true;
* TODO: Fehlerfall kommentieren, bzw. Exceptions werfen ????? } else {
* TODO: Buchstabe zum überpüfen übergeben return false;
* 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). /**
* * Funktion setzeVertauschung mit angabe eines Ports von 1 - 10
* @return boolean : result : Flag, der die Zulassigkeit der Vertauschungen zurueckgibt. * <br>
*/ * Der Funktion setzeVertauschung werden 2 Buchstaben (buchstabe1 und buchstabe2) sowie der Port übergeben.
public boolean ueberpruefeVertauschungen() { * Zuerst wird überprüft ob einer der beiden Buchstaben bereits enthalten ist, was unzulässig wäre.
boolean result = true; * <br>
* Anschließend wird:
/*Es wird geprüft: * <p>
1. Ob im Array originalBuchstaben Dopplungen enthalten sind. * buchstabe1 in das Array orginalBuchstaben auf den Index (steckbrettPort) geschrieben
2. Ob im Array originalBuchstaben Buchstaben im Array getauschteBuchstaben enthalten sind. * buchstabe2 in das Array getauschteBuchstaben auf den Index (steckbrettPort) geschrieben.
3. Ob im Array getauschteBuchstaben Dopplungen enthalten sind. * </p>
Tritt einer der Fälle ein, erfolgt eine Konsolenausgabe und der Flag wird auf false gesetzt. *
*/ * @param buchstabe1 : char: Gibt den ersten Buchstaben an, der getauscht werden soll.
for (int n = 0; n < orginalBuchstaben.length; n++) { * @param buchstabe2 : char: gibt den zweiten Buchstaben an, mit dem der erste getauscht werden soll.
if (orginalBuchstaben.equals(orginalBuchstaben[n]) || * @return boolean : Wenn die Vertauschung zulässig ist, true, ansonsten false
getauschteBuchstaben.equals(orginalBuchstaben[n]) || */
getauschteBuchstaben.equals(getauschteBuchstaben[n])) { public boolean setzeVertauschung(int steckbrettPort, char buchstabe1, char buchstabe2) {
System.err.println("Vertauschungen enthalten unzulässige Dopplungen");
result = false; if (!ueberpruefeVertauschungen(buchstabe1) && !ueberpruefeVertauschungen(buchstabe2)) {
} return false;
} } else {
orginalBuchstaben[steckbrettPort - 1] = buchstabe1;
return result; getauschteBuchstaben[steckbrettPort - 1] = buchstabe2;
}
return true;
/** }
* 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. * Funktion ueberpruefeVertauschungen
* @return buchstabe : Character : Codierter Buchstabe. * <br>
*/ * Die Funktion ueberpruefeVertauschungen prueft ob der übergebene Buchstabe bereits in den beiden Arrays
public char codiere(Character buchstabe) { * (orginalBuchstaben) und (getauschteBuchstaben) vorhanden ist.
for (int index = 0; index < getauschteBuchstaben.length; index++) { * Eine Buchstabenvertauschung ist zulaessig, wenn keine Dopplungen der zu vertauschenden Buchstaben auftritt
if (buchstabe.equals(getauschteBuchstaben[index])) { * (ein Buchstabe nicht mehrmals vertauscht wird).
buchstabe = orginalBuchstaben[index]; *
} else if (buchstabe.equals(orginalBuchstaben[index])) { * @return boolean : Wenn false, dann darf der Buchstabe genutzt werden.
buchstabe = getauschteBuchstaben[index]; * Wenn er schon vorhanden ist, wird true zurück gegeben
} */
} public boolean ueberpruefeVertauschungen(char buchstabe) {
return 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