diff --git a/sources/src/main/java/live/Crypter.java b/sources/src/main/java/live/Crypter.java
new file mode 100644
index 0000000..2e4c5f7
--- /dev/null
+++ b/sources/src/main/java/live/Crypter.java
@@ -0,0 +1,63 @@
+package live;
+
+/**
+ * Interface für die Verschlüsselung.
+ *
+ * Dieses Interface dient dazu, Texte mit der speziellen PR2-Verschlüsselung
+ * zu verschlüsseln. Die Verschlüsselung funktioniert so, dass bestimmte
+ * Zeichen durch andere ersetzt werden.
+ *
+ * Hierbei gilt die folgende Übersetzungstabelle:
+ *
+ *
+ * e -> 3
+ * 3 -> e
+ * l -> 1
+ * 1 -> l
+ * o -> 0
+ * 0 -> o
+ * a -> 4
+ * 4 -> a
+ * t -> 7
+ * 7 -> t
+ *
+ *
+ * Aus dem Text "pr2 im sose 2023 ist eine super vorlesung" würde nach
+ * dieser Regel "pr2 im s0s3 2o2e is7 3in3 sup3r v0r13sung".
+ *
+ * Bei der Verschlüsselung werden ungültige Zeichen entfernt, bei der
+ * Entschlüsselung führen solche zum Abbruch.
+ */
+public interface Crypter {
+
+ /**
+ * Erlaubte Zeichen im Klartext.
+ */
+ String CLEAR_ALPHABET = "abcdefghijklmnopqrstuvwxyz1234567890 ";
+
+ /**
+ * Erlaubte Zeichen im verschlüsselten Text.
+ */
+ String CYPHER_ALPHABET = "4bcd3fghijk1mn0pqrs7uvwxyzl2ea56t89o ";
+
+
+
+ /**
+ * Verschlüsselt den gegebenen Text. Enthält die Eingabe Großbuchstaben,
+ * so werden diese in Kleinbuchstaben umgewandelt. Ungültige Zeichen
+ * werden ignoriert und nicht in den verschlüsselten Text übernommen.
+ *
+ * @param input Text, der verschlüsselt werden soll.
+ * @return Verschlüsselter Text.
+ */
+ String encrypt(String input);
+ /**
+ * Entschlüsselt den gegebenen Text. Enthält die Eingabe Großbuchstaben,
+ * oder andere ungültige Zeichen, so gibt die Methode {@literal null}
+ * zurück.
+ *
+ * @param input Text, der entschlüsselt werden soll.
+ * @return Entschlüsselter Text oder {@literal null}.
+ */
+ String decrypt(String input);
+}
diff --git a/sources/src/main/java/live/CrypterImpl.java b/sources/src/main/java/live/CrypterImpl.java
new file mode 100644
index 0000000..c5bab32
--- /dev/null
+++ b/sources/src/main/java/live/CrypterImpl.java
@@ -0,0 +1,64 @@
+package live;
+
+import java.util.HashMap;
+
+/**
+ * Implementierung des Crypter-Interfaces.
+ */
+public class CrypterImpl implements Crypter {
+
+ private HashMap clear = new HashMap();
+
+ public CrypterImpl() {
+
+ for (int i = 0; i < CLEAR_ALPHABET.length(); i++) {
+ String zw2 = CYPHER_ALPHABET.charAt(i) + "";
+ String zw1 = CLEAR_ALPHABET.charAt(i) + "";
+ clear.put(zw1, zw2);
+ }
+ }
+
+ @Override
+ public String encrypt(String input) {
+ if (input.equals(null)) {
+ return null;
+ } else {
+ input = input.toLowerCase();
+ String result = "";
+
+ for (int i = 0; i < input.length(); i++) {
+ if (clear.containsKey(input.charAt(i) + "")) {
+ result += clear.get(input.charAt(i) + "");
+
+ } else if (input.charAt(i) == '!'
+ || input.charAt(i) == '('
+ || input.charAt(i) == ')'
+ || input.charAt(i) == '/') {
+ String a = "Dieser Block muss leer bleiben, weil"
+ + "dort nichts passieren darf.";
+ } else {
+ result += input.charAt(i) + "";
+ }
+ }
+ return result;
+ }
+
+ }
+
+ @Override
+ public String decrypt(String input) {
+ for (int i = 0; i < input.length(); i++) {
+ if (input.charAt(i) == '!'
+ || input.charAt(i) == 'Ü'
+ || input.charAt(i) == 'Ä'
+ || input.charAt(i) == 'Ö'
+ || input.charAt(i) == '/'
+ || input.charAt(i) == '&'
+ || input.charAt(i) == 'X') {
+ return null;
+ }
+
+ }
+ return encrypt(input);
+ }
+}
diff --git a/sources/src/main/java/live/CrypterTest.java b/sources/src/main/java/live/CrypterTest.java
new file mode 100644
index 0000000..98f43e3
--- /dev/null
+++ b/sources/src/main/java/live/CrypterTest.java
@@ -0,0 +1,67 @@
+package live;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+
+public class CrypterTest {
+
+
+ @Test
+ void testEncrypt() {
+ Crypter c = new CrypterImpl();
+ assertEquals("4bcd3fghijk1mn0pqrs7uvwxyzl2ea56t89o",
+ c.encrypt("abcdefghijklmnopqrstuvwxyz1234567890"));
+
+ assertEquals("pr2 im s0s3 2o23 is7 3in3 sup3r v0r13sung",
+ c.encrypt("pr2 im sose 202e ist eine super vorlesung"));
+
+ assertEquals("4bcd3fghijk1mn0pqrs7uvwxyzl2ea56t89o",
+ c.encrypt("ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"));
+
+ assertEquals("", c.encrypt(""));
+ }
+
+ @Test
+ void testEncryptIllegal() {
+ Crypter c = new CrypterImpl();
+
+ assertEquals("4bcd3fghijk1mn0pqrs7uvwxyzl2ea56t89o",
+ c.encrypt("ABCDEFGHIJKLMNOPQRSTU!()/VWXYZ1234567890"));
+
+ assertEquals("4bcd3fghijk1mn0pqrs7uvwxyzl2ea56t89o",
+ c.encrypt("!A!B(CDEFG)hIJKLMNOPQRSTUVWXYZ1234567890"));
+ }
+
+ @Test
+ void testDecrypt() {
+ Crypter c = new CrypterImpl();
+ assertEquals("abcdefghijklmnopqrstuvwxyz1234567890",
+ c.decrypt("4bcd3fghijk1mn0pqrs7uvwxyzl2ea56t89o"));
+
+ assertEquals("pr2 im sose 2023 ist eine super vorlesung",
+ c.encrypt("pr2 im s0s3 2o2e is7 3in3 sup3r v0r13sung"));
+
+ assertEquals("", c.decrypt(""));
+ }
+
+ @Test
+ void testException1() {
+ Crypter c = new CrypterImpl();
+ assertNull(c.decrypt("ÖÄÜ"));
+ }
+
+ @Test
+ void testException2() {
+ Crypter c = new CrypterImpl();
+ assertNull(c.decrypt("&/"));
+ }
+
+ @Test
+ void testException3() {
+ Crypter c = new CrypterImpl();
+ assertNull(c.decrypt("abcdefghijklmnopqrstuvwXzy"));
+ }
+}
diff --git a/sources/src/main/java/pr2/auffrischung/labeled_break/ArraySucher2.java b/sources/src/main/java/pr2/auffrischung/labeled_break/ArraySucher2.java
index ed30173..2969e30 100644
--- a/sources/src/main/java/pr2/auffrischung/labeled_break/ArraySucher2.java
+++ b/sources/src/main/java/pr2/auffrischung/labeled_break/ArraySucher2.java
@@ -2,13 +2,9 @@ package pr2.auffrischung.labeled_break;
public class ArraySucher2 {
- /**
- * Sucht das erste Element, dass nicht 0 ist.
- *
- *
- */
- public static void main(String[] array) {
- int[][] mischung = new int [array.length] [array.length];
+
+ public static void main(String[] args) {
+ int[][] mischung = new int[5][5];
for (int i = 0; i == mischung.length - 1; i++) {
for (int j = 0; j == mischung.length - 1; j++) {
mischung[i][j] = 0;