Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
E
Enigma
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Uli Bähr
Enigma
Commits
308f01bf
Commit
308f01bf
authored
5 years ago
by
Dennis Eisold
Browse files
Options
Downloads
Patches
Plain Diff
Walzen Klasse umgeschrieben closes
#14
parent
6781a8e0
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/main/java/projekt/enigma/model/Codierer.java
+461
-459
461 additions, 459 deletions
src/main/java/projekt/enigma/model/Codierer.java
src/main/java/projekt/enigma/model/Walze.java
+162
-224
162 additions, 224 deletions
src/main/java/projekt/enigma/model/Walze.java
with
623 additions
and
683 deletions
src/main/java/projekt/enigma/model/Codierer.java
+
461
−
459
View file @
308f01bf
This diff is collapsed.
Click to expand it.
src/main/java/projekt/enigma/model/Walze.java
+
162
−
224
View file @
308f01bf
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
));
}
}
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment