diff --git a/sources/.classpath b/sources/.classpath
index 897e11f..b50a49b 100644
--- a/sources/.classpath
+++ b/sources/.classpath
@@ -6,6 +6,7 @@
+
diff --git a/sources/src/main/java/Crypter.java b/sources/beispieleVL/Crypter/Crypter.java
similarity index 99%
rename from sources/src/main/java/Crypter.java
rename to sources/beispieleVL/Crypter/Crypter.java
index a6cc698..1a4e1ae 100644
--- a/sources/src/main/java/Crypter.java
+++ b/sources/beispieleVL/Crypter/Crypter.java
@@ -1,3 +1,4 @@
+package Crypter;
/**
diff --git a/sources/src/main/java/CrypterImpl.java b/sources/beispieleVL/Crypter/CrypterImpl.java
similarity index 99%
rename from sources/src/main/java/CrypterImpl.java
rename to sources/beispieleVL/Crypter/CrypterImpl.java
index f4b1b23..0ad6092 100644
--- a/sources/src/main/java/CrypterImpl.java
+++ b/sources/beispieleVL/Crypter/CrypterImpl.java
@@ -1,3 +1,4 @@
+package Crypter;
import java.util.HashMap;
diff --git a/sources/src/main/java/CrypterTest.java b/sources/beispieleVL/Crypter/CrypterTest.java
similarity index 99%
rename from sources/src/main/java/CrypterTest.java
rename to sources/beispieleVL/Crypter/CrypterTest.java
index bbe327c..48cddaa 100644
--- a/sources/src/main/java/CrypterTest.java
+++ b/sources/beispieleVL/Crypter/CrypterTest.java
@@ -1,3 +1,4 @@
+package Crypter;
import org.junit.jupiter.api.Test;
diff --git a/sources/beispieleVL/enumeration/Main.java b/sources/beispieleVL/enumeration/Main.java
new file mode 100644
index 0000000..6b156c9
--- /dev/null
+++ b/sources/beispieleVL/enumeration/Main.java
@@ -0,0 +1,21 @@
+package enumeration;
+
+
+public class Main {
+
+ public static void main(String[] args) {
+
+ System.out.println(Planet.values());
+
+ for (Planet planet : Planet.values()) {
+ System.out.printf("%s -> %,.0f km/h%n",
+ planet.name(),
+ planet.bahngeschwindigkeit());
+ }
+
+ System.out.println(Planet.MERKUR.toString());
+ System.out.println(Planet.MERKUR.name());
+ System.out.println(Planet.JUPITER.toString());
+ System.out.println(Planet.JUPITER.name());
+ }
+}
diff --git a/sources/beispieleVL/enumeration/Operation.java b/sources/beispieleVL/enumeration/Operation.java
new file mode 100644
index 0000000..fd95348
--- /dev/null
+++ b/sources/beispieleVL/enumeration/Operation.java
@@ -0,0 +1,22 @@
+package enumeration;
+
+public enum Operation {
+
+ ADDITION {
+ public double anwenden(double op1, double op2) {
+ return op1 + op2;
+ }
+ },
+ SUBTRAKTION {
+ public double anwenden(double op1, double op2) {
+ return op1 - op2;
+ }
+ },
+ MULTIPLIKATION {
+ public double anwenden(double op1, double op2) {
+ return op1 * op2;
+ }
+ };
+
+ public abstract double anwenden(double op1, double op2);
+}
diff --git a/sources/beispieleVL/enumeration/Planet.java b/sources/beispieleVL/enumeration/Planet.java
new file mode 100644
index 0000000..d02f106
--- /dev/null
+++ b/sources/beispieleVL/enumeration/Planet.java
@@ -0,0 +1,27 @@
+package enumeration;
+
+public enum Planet {
+ MERKUR(59e+6, 88), VENUS(108e+6, 225),
+ ERDE(150e+6, 365), MARS(228e+6, 1.9*365),
+ JUPITER(778e+6, 11.9*365), SATURN(1427e+6, 29.5*365),
+ URANUS(2870e+6, 84*365), NEPTUN(4497e+6, 165*365);
+
+ private final double entfernungsonne;
+ private final double umlaufzeit;
+
+ private Planet(double entfernungsonne, double umlaufzeit) {
+ this.entfernungsonne = entfernungsonne;
+ this.umlaufzeit = umlaufzeit;
+ }
+
+ public double bahngeschwindigkeit() {
+ return 2 * entfernungsonne * Math.PI / umlaufzeit / 24;
+ }
+
+ @Override
+ public String toString() {
+ return name() + " ist der " + (ordinal() + 1) + " Planet im Sonnensystem.";
+
+ }
+
+}
diff --git a/sources/beispieleVL/enumeration/Rechner.java b/sources/beispieleVL/enumeration/Rechner.java
new file mode 100644
index 0000000..0038c09
--- /dev/null
+++ b/sources/beispieleVL/enumeration/Rechner.java
@@ -0,0 +1,18 @@
+package enumeration;
+
+public class Rechner {
+
+ public double rechne(double op1, double op2, Operation operation) {
+ return operation.anwenden(op1, op2);
+ }
+
+ public static void main(String[] args) {
+ Rechner r = new Rechner();
+
+ double summe = r.rechne(5, 5, Operation.ADDITION);
+ double differenz = r.rechne(6, 3, Operation.SUBTRAKTION);
+ double produkt = r.rechne(6, 3, Operation.MULTIPLIKATION);
+
+ System.out.printf("%.0f, %.0f, %.0f", summe, differenz, produkt);
+ }
+}
diff --git a/sources/beispieleVL/enumeration/Wochentag.java b/sources/beispieleVL/enumeration/Wochentag.java
new file mode 100644
index 0000000..e2825c0
--- /dev/null
+++ b/sources/beispieleVL/enumeration/Wochentag.java
@@ -0,0 +1,6 @@
+package enumeration;
+
+public enum Wochentag {
+ MONTAG, DIENSTAG, MITTWOCH, DONNERSTAG, FREITAG, SAMSTAG, SONNTAG;
+
+}
diff --git a/sources/beispieleVL/generics/ExtStack.java b/sources/beispieleVL/generics/ExtStack.java
new file mode 100644
index 0000000..0252b7e
--- /dev/null
+++ b/sources/beispieleVL/generics/ExtStack.java
@@ -0,0 +1,22 @@
+package generics;
+
+public class ExtStack extends SimpleStack {
+
+ public ExtStack(int size) {
+ super(size);
+ }
+
+ /*
+ * In dieser Methode passiert nichts anderes als die Ausgabe des zuletzt
+ * gesetzten Wertes (in diesem Fall ein String). Das erzeugte Array wurde
+ * üder den Konstruktor ExtStack angelegt, indem die Arraygröße und
+ * der Datentyp in dem Konstruktoraufruf (siehe Mainmethode) übergeben wurde
+ * und der Aufruf an die Superklasse SimpleStack weitergeleitet wurde.
+ */
+ public T peek() {
+ T wert = pop(); // Hier wird der Wert mit pop() aus dem Array geholt
+ push(wert); // und in die Variable wert geschrieben
+ return wert; // danach erfolgt die Rückmeldung an den Methodenaufruf
+ }
+
+}
diff --git a/sources/beispieleVL/generics/Main.java b/sources/beispieleVL/generics/Main.java
new file mode 100644
index 0000000..4183dea
--- /dev/null
+++ b/sources/beispieleVL/generics/Main.java
@@ -0,0 +1,29 @@
+package generics;
+
+public class Main {
+
+ public static void main(String[] args) {
+
+
+ var simplestack1 = new SimpleStack(5);
+
+ simplestack1.push("Hallo");
+ simplestack1.push("das ist ein Beispiel für");
+ simplestack1.push("einen SimpleStack.");
+ simplestack1.push("Logisch wird alles in ");
+ simplestack1.push("verkehrter Reihenfolge ausgegeben.");
+
+ for (int i = simplestack1.getSize(); i > 0 ; i--) {
+ System.out.print(simplestack1.pop() + "| |");
+ }
+
+ var extstack1 = new ExtStack(2);
+
+ extstack1.push("Hallo");
+ extstack1.push("Hello");
+
+ System.out.println(extstack1.peek());
+
+ }
+
+}
diff --git a/sources/beispieleVL/generics/SimpleStack.java b/sources/beispieleVL/generics/SimpleStack.java
new file mode 100644
index 0000000..c5c0524
--- /dev/null
+++ b/sources/beispieleVL/generics/SimpleStack.java
@@ -0,0 +1,39 @@
+package generics;
+
+public class SimpleStack {
+ /*
+ * Der Einsatz eines Typ-Parameters hält diese Klasse generisch und
+ * ermöglicht es, dass erst in der Main der Datentyp des Arrays festgelegt
+ * werden kann. Somit ist die generische Klasse in ihrer Implementierung
+ * unabhängig von der Main-Klasse.
+ */
+ private T[] stack;
+ private int pos;
+
+ @SuppressWarnings("unchecked")
+ public SimpleStack(int size) {
+ stack = (T[]) new Object[size];
+ pos = 0;
+ }
+
+ public void push(T o) {
+ stack[pos++] = o;
+ }
+
+ public T pop() {
+ return stack[--pos];
+
+ }
+ /*
+ * Dies ist ziemlich schlechter Programmierstiel, da für einen gut
+ * funktionierenden Stack noch weitere Methoden fehlen.
+ * Diese sind zum Beispiel swap(), peek() und clear(). So das es möglich
+ * ist Daten zu Tauschen (swap()), Daten zu löschen (clear()) oder nach
+ * Daten zu suchen (peek())
+ */
+
+ public int getSize () {
+ // TODO Auto-generated method stub
+ return pos;
+ }
+}
diff --git a/sources/beispieleVL/records/Rechteck.java b/sources/beispieleVL/records/Rechteck.java
new file mode 100644
index 0000000..b6be3bc
--- /dev/null
+++ b/sources/beispieleVL/records/Rechteck.java
@@ -0,0 +1,27 @@
+package records;
+
+
+public class Rechteck extends Exception{
+
+ record Rectangle(double laenge, double breite) {
+ public Rectangle {
+ if (laenge <= 0 || breite <= 0) {
+ throw new java.lang.IllegalArgumentException(
+ String.format("Keine 0 oder negative Werte erlaubt."));
+ }
+ }
+ }
+
+ public static void main(String[] args) {
+
+ Rectangle r = new Rectangle(4.0, 3.0);
+ Rectangle r2 = new Rectangle(1.0, 2.0);
+
+ System.out.println("Fläche: " + r.laenge() * r.breite());
+ System.out.println("Fläche2: " + r2.laenge() * r2.breite());
+ }
+
+
+
+
+}
diff --git a/sources/beispieleVL/records/RechteckOhneRecords.java b/sources/beispieleVL/records/RechteckOhneRecords.java
new file mode 100644
index 0000000..a72a207
--- /dev/null
+++ b/sources/beispieleVL/records/RechteckOhneRecords.java
@@ -0,0 +1,28 @@
+package records;
+
+public final class RechteckOhneRecords {
+
+ private final double laenge;
+ private final double breite;
+
+ public RechteckOhneRecords(double laenge, double breite) {
+ this.laenge = laenge;
+ this.breite = breite;
+ }
+
+ public static void main(String[] args) {
+ RechteckOhneRecords r = new RechteckOhneRecords(4, 3);
+
+ System.out.println("Fläche = " + r.laenge() * r.breite());
+ }
+
+ private double breite() {
+ // TODO Auto-generated method stub
+ return laenge;
+ }
+
+ private double laenge() {
+ // TODO Auto-generated method stub
+ return breite;
+ }
+}
diff --git a/sources/src/main/java/pr2/generics/einfach/Liste.java b/sources/src/main/java/pr2/generics/einfach/Liste.java
index 86b395d..1964977 100644
--- a/sources/src/main/java/pr2/generics/einfach/Liste.java
+++ b/sources/src/main/java/pr2/generics/einfach/Liste.java
@@ -8,7 +8,7 @@ package pr2.generics.einfach;
/**
* Eine einfache, verkettete Liste.
*/
-public class Liste {
+public class Liste {
/** Referenz auf den ersten Knoten. */
private ListeNode first;
@@ -19,11 +19,12 @@ public class Liste {
/**
* Fügt ein neues Element an das Ende der Liste an.
*
- * @param data das Element
+ * @param i das Element
*/
- public void add(Object data) {
+ public void add(String i) {
- ListeNode nextNode = new ListeNode(data);
+ @SuppressWarnings("unchecked")
+ ListeNode nextNode = new ListeNode(i);
if (current == null) {
// Liste komplett leer
@@ -42,17 +43,18 @@ public class Liste {
* @param index Index, beginnend bei 0.
* @return Das Element oder {@code null}, wenn es nicht gefunden wurde.
*/
- public Object get(int index) {
+ @SuppressWarnings("unchecked")
+ public String get(int index) {
int count = 0;
- ListeNode node = first;
+ T node = (T) first;
while ((node != null) && (count < index)) {
- node = node.getNext();
+ node = ((ListeNode) node).getNext();
count++;
}
if ((count == index) && (node != null)) {
- return node.data;
+ return ((ListeNode) node).getData();
}
else {
// index does not exist
@@ -75,13 +77,18 @@ public class Liste {
*/
public int size() {
int count = 0;
- ListeNode node = first;
+ T node = (T) first;
while (node != null) {
- node = node.getNext();
+ node = (T) ((ListeNode) node).getNext();
count++;
}
return count;
}
+
+ public void add(int i) {
+ // TODO Auto-generated method stub
+
+ }
}
diff --git a/sources/src/main/java/pr2/generics/einfach/ListeNode.java b/sources/src/main/java/pr2/generics/einfach/ListeNode.java
index 0336f11..8a714ae 100644
--- a/sources/src/main/java/pr2/generics/einfach/ListeNode.java
+++ b/sources/src/main/java/pr2/generics/einfach/ListeNode.java
@@ -3,25 +3,31 @@ package pr2.generics.einfach;
/**
* Interne Repräsentation der Knoten in der Liste.
*/
-class ListeNode {
+class ListeNode {
/** Daten. */
- Object data;
+ String data;
/** Referenz auf den nächsten Knoten. */
- ListeNode next;
+ E next;
/**
* Legt einen neuen Knoten an.
*
* @param data daten, die gespeichert werden
*/
- ListeNode(Object data) {
- this.data = data;
+ protected ListeNode(String data) {
+ this.setData(data);
}
- public ListeNode getNext() {
+ public E getNext() {
return next;
}
- public void setNext(ListeNode next) {
+ public void setNext(E next) {
this.next = next;
}
+ public void setData(String data) {
+ this.data = data;
+ }
+ public String getData() {
+ return data;
+ }
}
diff --git a/sources/src/main/java/pr2/generics/einfach/test/ListeTest.java b/sources/src/main/java/pr2/generics/einfach/test/ListeTest.java
index 673d13b..6fe8dcc 100644
--- a/sources/src/main/java/pr2/generics/einfach/test/ListeTest.java
+++ b/sources/src/main/java/pr2/generics/einfach/test/ListeTest.java
@@ -20,12 +20,12 @@ public class ListeTest {
assertEquals(0, l.size());
- l.add("Hallo");
+ l.add( "Hallo");
assertEquals(1, l.size());
- l.add(34);
+ l.add( "");
assertEquals(2, l.size());
- l.add("Peter");
- l.add("Alfons");
+ l.add( "Peter");
+ l.add( "Alfons");
assertEquals(4, l.size());
l.clear();
@@ -37,7 +37,7 @@ public class ListeTest {
*/
@Test
void testGet() {
- Liste l = new Liste();
+ Liste l = new Liste();
l.add("Hallo");
l.add("Hugo");
l.add("Peter");
diff --git a/sources/src/main/java/pr2/generics/pair/Main.java b/sources/src/main/java/pr2/generics/pair/Main.java
index a60a01e..083371f 100644
--- a/sources/src/main/java/pr2/generics/pair/Main.java
+++ b/sources/src/main/java/pr2/generics/pair/Main.java
@@ -2,17 +2,17 @@ package pr2.generics.pair;
public class Main {
public static void main(String[] args) {
-// TODO: Einkommentieren
-// var note1 = new Pair("Peter", 1);
-// var note2 = new Pair("Frank", 3);
-// var note3 = new Pair("Sabine", 1);
-//
-// var name = new Pair("Peter", "Meier");
-//
-// System.out.printf("%s:%d\n", note1.getFirst(), note1.getSecond());
-// System.out.printf("%s:%d\n", note2.getFirst(), note1.getSecond());
-// System.out.printf("%s:%d\n", note3.getFirst(), note1.getSecond());
-//
-// System.out.printf("%s %s\n", name.getFirst(), name.getSecond());
+
+ var note1 = new Pair("Peter", 1);
+ var note2 = new Pair("Frank", 3);
+ var note3 = new Pair("Sabine", 1);
+
+ var name = new Pair("Peter", "Meier");
+
+ System.out.printf("%s:%d\n", note1.getFirst(), note1.getSecond());
+ System.out.printf("%s:%d\n", note2.getFirst(), note1.getSecond());
+ System.out.printf("%s:%d\n", note3.getFirst(), note1.getSecond());
+
+ System.out.printf("%s %s\n", name.getFirst(), name.getSecond());
}
}
diff --git a/sources/src/main/java/pr2/generics/pair/Pair.java b/sources/src/main/java/pr2/generics/pair/Pair.java
index 6700e30..a033ef8 100644
--- a/sources/src/main/java/pr2/generics/pair/Pair.java
+++ b/sources/src/main/java/pr2/generics/pair/Pair.java
@@ -1,5 +1,21 @@
package pr2.generics.pair;
- public class Pair {
-
+ public class Pair {
+
+ private K data1;
+ private V data2;
+
+ public Pair(K data1, V data2) {
+ this.data1 = data1;
+ this.data2 = data2;
+
+ }
+
+ public K getFirst() {
+ return data1;
+ }
+
+ public V getSecond() {
+ return data2;
+ }
}