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

Walzen Klasse umgeschrieben closes #14

parent 6781a8e0
No related branches found
No related tags found
No related merge requests found
This diff is collapsed.
package projekt.enigma.model; package projekt.enigma.model;
import java.util.Arrays;
import java.util.Collections;
/** /**
* Klasse Walze * Klasse Walze
* <br> * <br>
...@@ -17,228 +14,169 @@ import java.util.Collections; ...@@ -17,228 +14,169 @@ import java.util.Collections;
*/ */
public class Walze { public class Walze {
/** /**
* walzeAlpha : Character[] : Array, dass die Buchstaben des Alphabets enthaelt * Das String Array aller bekannter aktuellen Walzen
*/ */
private Character[] alphabet; String[] walzen;
/** /**
* ringstellung : char : zeigt die Einstellung fuer den Umspringpunkt * walzeAlpha : Character[] : Array, dass die Buchstaben des Alphabets enthaelt
*/ */
private char ringstellung; private String alphabet;
/** /**
* walzennr : int : Bestimmt, welche Walze genutzt wird * ringstellung : char : zeigt die Einstellung fuer den Umspringpunkt
*/ */
private int walzennr; private char ringstellung;
/** /**
* alphabet : Character[] : Enthaelt die Buchstaben des Alphabets. Wird im Laufe des Programmes * walzennr : int : Bestimmt, welche Walze genutzt wird
* aber immer wieder ueberschrieben. */
*/ private int walzenNr;
private Character[] walzeAlpha;
/**
/** * Die Anzahl der getätigten Walzen Drehungen
* Ueberschriebener Konstruktor, der die Eingangsparameter der Walze mitgibt */
* private int turns;
* @param walzennr : int : Nummer der gewaehlten Walze
* @param ringstellung : int : Einstellung des Umsprungpunktes /**
*/ * Ueberschriebener Konstruktor, der die Eingangsparameter der Walze mitgibt
public Walze(int walzennr, int ringstellung) { *
this.alphabet = new Character[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', * @param walzenNr : int : Nummer der gewaehlten Walze
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; * @param ringstellung : int : Einstellung des Umsprungpunktes
this.walzeAlpha = new Character[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', */
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; public Walze(int walzenNr, int ringstellung) {
this.setWalzennr(walzennr); assert false;
this.setRingstellung(ringstellung); this.walzen = new String[5];
} this.walzen[0] = "EKMFLGDQVZNTOWYHXUSPAIBRCJ";
this.walzen[1] = "AJDKSIRUXBLHWTMCQGZNPYFVOE";
/** this.walzen[2] = "BDFHJLCPRTXVZNYEIWGAKMUSQO";
* Sortiert der Walzennummer das passende Character-Array mittels switch zu. this.walzen[3] = "ESOVPZJAYQUIRHXLNFTGKDCMWB";
* this.walzen[4] = "VZBRGITYUPSDNHLXAWMJQOFECK";
* @return walze : Character[] : gibt die gewaehlte Walze zurueck this.alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
*/
private Character[] walzenNummer() { this.turns = 0;
Character[] walze = new Character[26];
this.setWalzenNr(walzenNr);
// Character-Arrays fuer die Codierung jeder Walze this.setRingstellung(ringstellung);
Character[] walzeEins = {'E', 'K', 'M', 'F', 'L', 'G', 'D', 'Q', 'V', 'Z', 'N', 'T', 'O', 'W', 'Y', }
'H', 'X', 'U', 'S', 'P', 'A', 'I', 'B', 'R', 'C', 'J'};
Character[] walzeZwei = {'A', 'J', 'D', 'K', 'S', 'I', 'R', 'U', 'X', 'B', 'L', 'H', 'W', 'T', 'M', /**
'C', 'Q', 'G', 'Z', 'N', 'P', 'Y', 'F', 'V', 'O', 'E'}; * Sortiert der Walzennummer das passende Character-Array mittels switch zu.
Character[] walzeDrei = {'B', 'D', 'F', 'H', 'J', 'L', 'C', 'P', 'R', 'T', 'X', 'V', 'Z', 'N', 'Y', *
'E', 'I', 'W', 'G', 'A', 'K', 'M', 'U', 'S', 'Q', 'O'}; * @return walze : Character[] : gibt die gewaehlte Walze zurueck
Character[] walzeVier = {'E', 'S', 'O', 'V', 'P', 'Z', 'J', 'A', 'Y', 'Q', 'U', 'I', 'R', 'H', 'X', */
'L', 'N', 'F', 'T', 'G', 'K', 'D', 'C', 'M', 'W', 'B'}; private String fetchWalze() {
Character[] walzeFuenf = {'V', 'Z', 'B', 'R', 'G', 'I', 'T', 'Y', 'U', 'P', 'S', 'D', 'N', 'H', 'L',
'X', 'A', 'W', 'M', 'J', 'Q', 'O', 'F', 'E', 'C', 'K'}; return walzen[walzenNr];
}
switch (this.walzennr) {
case 1: /**
walze = walzeEins; * Setzt die Initiale Ringstellung der Walze.
break; * Es sind nur Zahlen von 1 - 26 zugelassen.
case 2: * <p>
walze = walzeZwei; * Die Ringstellung wird zum char umgewandelt.
break; * Im Fehlerfall wird die Ringstellung standardmaessig auf 'Z' gesetzt.
case 3: *
walze = walzeDrei; * @param ringstellung : int : Punkt an dem die Walze umspringt
break; */
case 4: public void setRingstellung(int ringstellung) {
walze = walzeVier; if ((ringstellung > 0) && (ringstellung <= 26)) {
break; this.ringstellung = this.alphabet.charAt(ringstellung - 1);
case 5: } else {
walze = walzeFuenf; this.ringstellung = 'Z';
break; }
} }
return walze; /**
} * Dreht die Walze: verschiebt das Alphabet um keine, eine oder mehrere Stellen und ueberschreibt
* das Array alphabet mit der neuen Anordnung.
/** * <p>
* TODO: Dokumentieren * Ueberprueft, ob der Umspringpunkt der Walze nach der Drehung erreicht wurde.
* *
* @return ringstellung : char : gibt die neue Ringstellung als char zurueck * @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
public char getRingstellung() { * TODO: Doku
return ringstellung; */
} public boolean dreheWalze(int richtung) {
boolean checkRing = false;
/** int korrektorFaktor = 0;
* Setzt die Initiale Ringstellung der Walze.
* Es sind nur Zahlen von 1 - 26 zugelassen. if (richtung == 1) {
* <p> this.turns++;
* Die Ringstellung wird zum char umgewandelt. } else if (richtung == -1) {
* Im Fehlerfall wird die Ringstellung standardmaessig auf 'Z' gesetzt. korrektorFaktor = 1;
* this.turns--;
* @param ringstellung : int : Punkt an dem die Walze umspringt }
*/
//TODO ??? Setter Ringstellung // gleicht die Ringstellung mit der aktuellen Position ab
public void setRingstellung(int ringstellung) { if (this.getPosition() + korrektorFaktor == this.ringstellung) {
if ((ringstellung > 0) && (ringstellung <= 26)) { checkRing = true;
this.ringstellung = this.alphabet[ringstellung - 1]; }
} else {
this.ringstellung = 'Z'; return checkRing;
} }
}
/**
/** * Codiert den mitgegebenen Buchstaben anhand der gewaehlten Walze.
* Dreht die Walze: verschiebt das Alphabet um keine, eine oder mehrere Stellen und ueberschreibt *
* das Array alphabet mit der neuen Anordnung. * @param buchstabe : char : Buchstabe, der verschluesselt werden soll
* <p> * @return buchstabe : char : verschluesselter Buchstabe
* Ueberprueft, ob der Umspringpunkt der Walze nach der Drehung erreicht wurde. */
* public char codiere(char buchstabe) {
* @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 richtung) {
boolean checkRing = false;
int korrektorFaktor = 0;
if (richtung == 1) {
Collections.rotate(Arrays.asList(this.walzeAlpha), -1);
} else {
korrektorFaktor = 1;
Collections.rotate(Arrays.asList(this.walzeAlpha), 1);
}
// gleicht die Ringstellung mit der aktuellen Position ab
if (this.getPosition() + korrektorFaktor == this.ringstellung) {
checkRing = true;
}
return checkRing;
}
/**
* Codiert den mitgegebenen Buchstaben anhand der gewaehlten Walze.
*
* @param buchstabe : char : Buchstabe, der verschluesselt werden soll
* @return buchstabe : char : verschluesselter Buchstabe
*/
public char codiere(char buchstabe) {
/* durchsucht die (verschobene) Alphabetswalze nach dem aktuellen Buchstaben und /* durchsucht die (verschobene) Alphabetswalze nach dem aktuellen Buchstaben und
uebertraegt den Index auf die gewaehlte Codierwalze*/ uebertraegt den Index auf die gewaehlte Codierwalze*/
buchstabe = walzenNummer()[fetchArrayIndex(buchstabe, walzeAlpha)];
return this.fetchWalze().charAt((this.alphabet.indexOf(buchstabe) + this.turns) % 26);
return buchstabe; }
}
/**
/** * Decodiert den mitgegebenen Buchstaben mit Hilfe der (verschobenen) Alphabetswalze
* Decodiert den mitgegebenen Buchstaben mit Hilfe der (verschobenen) Alphabetswalze *
* * @param buchstabe : char : Buchstabe, der decodiert werden soll
* @param buchstabe : char : Buchstabe, der decodiert werden soll * @return buchstabe : char : decodierter Buchstabe
* @return buchstabe : char : decodierter Buchstabe */
*/ public char codiere2(char buchstabe) {
public char codiere2(char buchstabe) {
/* durchsucht die gewaehlte Walze nach dem aktuellen Buchstaben und /* durchsucht die gewaehlte Walze nach dem aktuellen Buchstaben und
uebertraegt den Index auf die (verschobene) Alphabetswalze*/ uebertraegt den Index auf die (verschobene) Alphabetswalze*/
buchstabe = walzeAlpha[fetchArrayIndex(buchstabe, walzenNummer())];
return this.alphabet.charAt((this.fetchWalze().indexOf(buchstabe) + this.turns) % 26);
return buchstabe; }
}
/**
/** * Setzt die Walzennummer. Es stehen fuenf Walze zur Auswahl.
* TODO: Dokumentieren *
* Ermittelt den Index eines Characters in einem Array ueber eine for-Schleife * @param walzenNr : int : Walzennummer
* */
* @param buchstabe : Character : Buchstabe, dessen Index benoetigt wird public void setWalzenNr(int walzenNr) {
* @param array : Character[] : Array, in dem der Buchstabe vorkommen soll if ((walzenNr > 0) && (walzenNr < 6)) {
* @return result : int : index des Buchstaben this.walzenNr = walzenNr - 1;
*/ } else {
private int fetchArrayIndex(Character buchstabe, Character[] array) { System.err.println("Keine gültige Walzennummer");
// wird mit ungueltigem Wert initialisiert }
int result = -1; }
for (int i = 0; i < array.length; i++) { /**
if (array[i].equals(buchstabe)) { * Gibt den Character zurueck, der aktuell in der Walze eingestellt ist
result = i; *
break; * @return Character am Index 0 des (verschobenen) Alphabets zurueck
} */
} public Character getPosition() {
return this.fetchWalze().charAt(turns % 26);
return result; }
}
/**
/** * * TODO: Funktionsname hat sich geändert
* Setzt die Walzennummer. Es stehen fuenf Walze zur Auswahl. * Gibt die Grundeinstellung der Walze ein. Nur Buchstaben von A - Z sind zugelassen.
* * Buchstaben werden automatisch in Grossbuchstaben umgewandelt.
* @param walzennr : int : Walzennummer * Ist die Grundeinstellung nicht 'A', wird die Methode dreheWalze() aufgerufen.
*/ *
public void setWalzennr(int walzennr) { * @param buchstabe : Character : Einstellung der Walze
if ((walzennr > 0) && (walzennr < 6)) { */
this.walzennr = walzennr; public void setPosition(Character buchstabe) {
} else { if (Character.isLetter(buchstabe)) {
System.err.println("Keine gültige Walzennummer"); this.turns = alphabet.indexOf(buchstabe);
} }
} }
}
/** \ No newline at end of file
* TODO: Dokumentieren // das selbe wie getAnzeig?
* Gibt den Character zurueck, der aktuell in der Walze eingestellt ist
*
* @return Character am Index 0 des (verschobenen) Alphabets zurueck
*/
public Character getPosition() {
return walzeAlpha[0];
}
/**
* * TODO: Funktionsname hat sich geändert
* Gibt die Grundeinstellung der Walze ein. Nur Buchstaben von A - Z sind zugelassen.
* Buchstaben werden automatisch in Grossbuchstaben umgewandelt.
* Ist die Grundeinstellung nicht 'A', wird die Methode dreheWalze() aufgerufen.
*
* @param buchstabe : Character : Einstellung der Walze
*/
public void setPosition(Character buchstabe) {
if (Character.isLetter(buchstabe)) {
buchstabe = Character.toUpperCase(buchstabe);
System.arraycopy(this.alphabet, 0, this.walzeAlpha, 0, this.alphabet.length);
if (buchstabe > 'A') {
dreheWalze(this.fetchArrayIndex(buchstabe, this.walzeAlpha));
}
}
}
}
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