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

Morsecode Klasse fertig gestellt

parent 2bbd3c95
No related branches found
No related tags found
No related merge requests found
package Enigma.model;
import java.util.TreeMap;
import java.util.*;
import java.util.Map.Entry;
/**
* Diese Klasse definiert die Zugehörigkeit zwischen den Buchstaben A-Z und dem zugehörigen Morsecode.
* Die Funktionen sollen Texte von und zu Morsecode konvertieren.
*/
public class Morsecode {
TreeMap<String, String> codeMap = new TreeMap<>();
// Anlegen der codeMap als TreeMap
private TreeMap<String, String> codeMap = new TreeMap<>();
/**
* Im Konstruktor werden alle Notwendigen Zeichen und deren zugehöriger Codes, der Treemap hinzugefügt.
* Im Konstruktor werden alle verfügbaren Buchstaben (A-Z) und deren zugehörigen
* Morsecodes, der codeMap hinzugefügt.
*/
public Morsecode() {
codeMap.put("A", "10110");
codeMap.put("B", "110101010");
codeMap.put("C", "1101011010");
codeMap.put("D", "1101010");
codeMap.put("E", "10");
codeMap.put("F", "101011010");
codeMap.put("G", "11011010");
codeMap.put("H", "10101010");
codeMap.put("I", "1010");
codeMap.put("J", "10110110110");
codeMap.put("K", "11010110");
codeMap.put("L", "101101010");
codeMap.put("M", "110110");
codeMap.put("N", "11010");
codeMap.put("O", "110110110");
codeMap.put("P", "1011011010");
codeMap.put("Q", "11011010110");
codeMap.put("R", "1011010");
codeMap.put("S", "101010");
codeMap.put("T", "110");
codeMap.put("U", "1010110");
codeMap.put("V", "101010110");
codeMap.put("W", "10110110");
codeMap.put("X", "1101010110");
codeMap.put("Y", "11010110110");
codeMap.put("Z", "1101101010");
// KA - Spruchanfang
codeMap.put("KA", "1101011010110");
// AR - Spruchende
codeMap.put("AR", "101101011010");
// VE - Verstanden
codeMap.put("VE", "10101011010");
// SK - Verkehrsende
codeMap.put("SK", "10101011010110");
this.codeMap.put("A", ".-");
this.codeMap.put("B", "-...");
this.codeMap.put("C", "-.-.");
this.codeMap.put("D", "-..");
this.codeMap.put("E", ".");
this.codeMap.put("F", "..-.");
this.codeMap.put("G", "--.");
this.codeMap.put("H", "....");
this.codeMap.put("I", "..");
this.codeMap.put("J", ".---");
this.codeMap.put("K", "-.-");
this.codeMap.put("L", ".-..");
this.codeMap.put("M", "--");
this.codeMap.put("N", "-.");
this.codeMap.put("O", "---");
this.codeMap.put("P", ".--.");
this.codeMap.put("Q", "--.-");
this.codeMap.put("R", ".-.");
this.codeMap.put("S", "...");
this.codeMap.put("T", "-");
this.codeMap.put("U", "..-");
this.codeMap.put("V", "...-");
this.codeMap.put("W", ".--");
this.codeMap.put("X", "-..-");
this.codeMap.put("Y", "-.--");
this.codeMap.put("Z", "--..");
}
public void getCode(char sign) {
/**
* Diese Funktion überprüft ob das übergebene Buchstabe in der codeMap enthalten ist.
* Wenn es enthalten ist, wird der zugehörige Morsecode zurück gegeben, ansonsten null
*
* @param buchstabe : char : Zu übersetzender Buchstabe
* @return : String : Das zugehöriger Morsecode aus der codeMap
*/
private String getMorsecode(char buchstabe) {
// Testen ob das Char in der codeMap enthalten ist. Wenn ja, raussuchen und zurück geben
return this.codeMap.getOrDefault(String.valueOf(buchstabe).toUpperCase(), null);
}
/**
* Der übergebene String wird in seine einzelnen Zeichen (char) zerlegt und an die Funktion getMorsecode
* übergeben und der zugehörige Morsecode raus gesucht.
* Mittels eines StringBuilders werden die Ergebnisse zu einem Rückgabe String zusammen gesetzt.
* Wenn kein zugehöriger Code in der codeMap gefunden wurde, wird das Zeichen ignoriert da es bei der
* Enigma nicht vorhanden war.
*
* @param input : String : Zu konventierender Text
* @return String : Die in Morsecode konvertierte Text
*/
public String convertBuchstabeToMorsecode(String input) {
StringBuilder sb = new StringBuilder();
String morsecode;
// Durch alle char im übergebenen String loopen
for(int i = 0; i < input.length(); i++) {
// Wenn der char in der codeMap enthalten ist, an den Rückgabe String anheften, ansonsten nichts ignorieren.
morsecode = this.getMorsecode(input.charAt(i));
if(morsecode != null) {
sb.append(morsecode).append(' ');
}
}
// Gibt den konvertierten String zurück
return sb.toString();
}
/**
* Diese Funktion überprüft ob der übergebene Morsecode in der codeMap enthalten ist.
* Wenn er enthalten ist, wird der zugehörige Buchstabe zurück gegeben, ansonsten null
*
* @param morsecode : String : Der zu übersetzende Morsecode
* @return : String : Das zugehöriger Buchstaben aus der this.codeMap
*/
private String getBuchstabe(String morsecode) {
// Initialisieren des Rückgabe Strings
// TODO: Darf bei der Initialisierung gleich einen Wert setzten lauf JAVA Konventionen?
String result = null;
// Loopt duch die Codemap und erstellt daraus ein Set
for(Entry<String, String> entry : this.codeMap.entrySet()) {
// Wenn Value dem Morsecode entspricht, haben wir unseren Buchstaben gefunden und setzen ihn als Result
if(entry.getValue().equals(morsecode)) {
result = entry.getKey();
}
}
return result;
}
/**
* Der übergebene String wird in einen String Array zerlegt. Als Trennzeichen wird das Leerzeichen genutzt.
* Anschließend wird der Array durchlaufen und die Elemente an die Funktion getBuchstabe übergeben um den
* zugehörigen Buchstaben zu erhalten.
* Mittels eines StringBuilders werden die Ergebnisse zu einem Rückgabe String zusammen gesetzt.
* Wenn kein zugehöriger Buchstabe in der codeMap gefunden wurde, wird das Zeichen ignoriert da es bei der
* Enigma nicht vorhanden war.
*
* @param input : String : Zu konventierender Morsecode
* @return String : Der in Text konvertierte Morsecode
*/
public String convertMorsecodeToBuchstabe(String input) {
StringBuilder sb = new StringBuilder();
String buchstabe;
String[] morsecodes = input.split(" ");
// Durch alle char im übergebenen String loopen
for(String morsecode : morsecodes) {
// Wenn der char in der codeMap enthalten ist, an den Rückgabe String anheften, ansonsten nichts ignorieren.
buchstabe = this.getBuchstabe(morsecode);
if(buchstabe != null) {
sb.append(buchstabe).append(' ');
}
}
// Gibt den konvertierten String zurück
return sb.toString();
}
}
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