diff --git a/Main.java b/Main.java index ce2e792..32a06d6 100644 --- a/Main.java +++ b/Main.java @@ -29,16 +29,16 @@ public class Main decodierungBaum(codierung(text,wurzel), wurzel); - System.out.println(byteString_to_character(character_to_byteString(null))); - System.out.println(byteString_to_character(character_to_byteString('b'))); - System.out.println(byteString_to_character(character_to_byteString('c'))); - System.out.println(byteString_to_character(character_to_byteString('d'))); - System.out.println(byteString_to_character(character_to_byteString('e'))); - System.out.println(byteString_to_character(character_to_byteString('f'))); - System.out.println(byteString_to_character(character_to_byteString('g'))); - System.out.println(byteString_to_character(character_to_byteString('h'))); + System.out.println(binärString_to_character(character_to_binärString(null))); + System.out.println(binärString_to_character(character_to_binärString('b'))); + System.out.println(binärString_to_character(character_to_binärString('c'))); + System.out.println(binärString_to_character(character_to_binärString('d'))); + System.out.println(binärString_to_character(character_to_binärString('e'))); + System.out.println(binärString_to_character(character_to_binärString('f'))); + System.out.println(binärString_to_character(character_to_binärString('g'))); + System.out.println(binärString_to_character(character_to_binärString('h'))); - byteString_to_baum(baum_to_byteString(wurzel)); + binärString_to_baum(baum_to_binärString(wurzel)); printBaum(wurzel); } @@ -64,7 +64,7 @@ public class Main System.out.println("->" + entry.getKey() + ", Code: " + entry.getValue()); } - printBaum(byteString_to_baum(baum_to_byteString(wurzel))); + printBaum(binärString_to_baum(baum_to_binärString(wurzel))); } public static void test3() @@ -76,25 +76,25 @@ public class Main { if(baum == null)return; System.out.println("Buchstabe: " + baum.getBuchstabe() + ", Anzahl: " + baum.getAnzahl()); - printBaum(baum.getLeft()); + printBaum(baum.getLeft()); //ruft die Methode rekuirsiv auf printBaum(baum.getRight()); } public static void codes(String text) //erstellt die codes für jeden einzelnen Buchstaben { - Node wurzel = Node.erstellen(Zählen.countEachLetter(text)); - HashMap codes = new HashMap(); + Node wurzel = Node.erstellen(Zählen.countEachLetter(text)); //erstellt den Baum mithilfe der Node Klasse + HashMap codes = new HashMap(); //erstellt eine leere Hashmap - if(wurzel.getLeft() == null && wurzel.getRight() == null) + if(wurzel.getLeft() == null && wurzel.getRight() == null) //überprüft es ob der Baum mehr als ein zeichen lang ist { codes.put(wurzel.getBuchstabe(), "0"); } - else + else //nutzt generieren um die codes zu generieren { generieren(codes,wurzel,""); } - for (var entry : codes.entrySet()) + for (var entry : codes.entrySet()) //printet alle codes für das jeweiliege Zeichen { System.out.println("->" + entry.getKey() + ", Code: " + entry.getValue()); } @@ -104,70 +104,64 @@ public class Main //methode zum generieren der codes für jeden einzelnen Buchstaben public static void generieren(HashMap codes, Node node, String code) { - if(node == null)return; - System.out.println(node.getBuchstabe() +" " + code); - if(node.getLeft() == null && node.getRight() == null) + if(node == null)return; //abbruch Bedienung + if(node.getLeft() == null && node.getRight() == null) //überprüft ob das Node ein "Blatt" ist { - codes.put(node.getBuchstabe(), code); + codes.put(node.getBuchstabe(), code); //wenn ja, gibt es den Buchstaben und den jeweiliegen code zurück return; } - generieren(codes, node.getLeft(), code + "0"); + generieren(codes, node.getLeft(), code + "0"); //generiert rekursiv den code für die Äste generieren(codes, node.getRight(), code + "1"); } //generiert die Huffman-Codierung public static String codierung(String text, Node wurzel) { - HashMap codes = new HashMap(); + HashMap codes = new HashMap(); //erstellt eine leere Hashmap - if(wurzel.getLeft() == null && wurzel.getRight() == null) + if(wurzel.getLeft() == null && wurzel.getRight() == null) //überprüft es ob der Baum mehr als ein zeichen lang ist { codes.put(wurzel.getBuchstabe(), "0"); } - else + else //nutzt generieren um die codes zu generieren { generieren(codes,wurzel,""); } - String code = ""; - for (int i=0; i zahlen = Zählen.countEachLetter(text); - Node baum = Node.erstellen(zahlen); + Node baum = Node.erstellen(zahlen); //erstellt Baum - String codierterBaum = baum_to_byteString(baum); - String codierterText = codierung(text,baum); + String codierterBaum = baum_to_binärString(baum); //wandelt den Baum in Daten um, mit dem die Baumstruktur geladen werden kann + String codierterText = codierung(text,baum); //speichert den codierten Text - int textErstIndex = codierterBaum.length() + 32; - String codiertertextErstIndex = Int_to_ByteString(textErstIndex); - - System.out.println(codiertertextErstIndex + codierterBaum +" " + codierterText); + int textErstIndex = codierterBaum.length() + 32; //speichert den ersten Index der Text codierung + String codiertertextErstIndex = Int_to_binärString(textErstIndex); //wandelt den textErstIndex in Binär um return codiertertextErstIndex + codierterBaum + codierterText; } + //decodiert Buchstaben und speichert den Baum public static String decodierungInlkBaum(String code) { String codierterTextErstIndex = code.substring(0,32); - int textErstIndex = byteString_to_int(codierterTextErstIndex); + int textErstIndex = binärString_to_int(codierterTextErstIndex); String codierterBaum = code.substring(32, textErstIndex); - Node decodierterBaum = byteString_to_baum(codierterBaum); + Node decodierterBaum = binärString_to_baum(codierterBaum); String codierterText = code.substring(textErstIndex, code.length()); String decodierterText = decodierungBaum(codierterText,decodierterBaum); @@ -214,9 +208,9 @@ public class Main - public static Byte ByteString_to_Byte (String byteString) + public static Byte binärString_to_Byte (String binärString) { - if(byteString.length() != 8) + if(binärString.length() != 8) { System.out.println(">8"); return null; @@ -225,8 +219,8 @@ public class Main byte result = 0; for(byte i=0 ;i<8;i++) { - if(byteString.charAt(7-i) == '1')result|=1< äste = new Stack(); for(int i=0;i32"); return null; @@ -336,8 +330,8 @@ public class Main int result = 0; for(int i=0 ;i<32;i++) { - if(byteString.charAt(31-i) == '1')result|=1<