diff --git a/.nfs000000000157ded700000020 b/.nfs000000000157ded700000020
new file mode 100644
index 0000000..11ac226
Binary files /dev/null and b/.nfs000000000157ded700000020 differ
diff --git a/u20/.classpath b/u20/.classpath
new file mode 100644
index 0000000..57bca72
--- /dev/null
+++ b/u20/.classpath
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/u20/.gitignore b/u20/.gitignore
new file mode 100644
index 0000000..ae3c172
--- /dev/null
+++ b/u20/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/u20/.project b/u20/.project
new file mode 100644
index 0000000..e0b1cb8
--- /dev/null
+++ b/u20/.project
@@ -0,0 +1,17 @@
+
+
+ u20
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/u20/.settings/org.eclipse.jdt.core.prefs b/u20/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..8c9943d
--- /dev/null
+++ b/u20/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,14 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=17
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=17
diff --git a/u20/src/Bruch.java b/u20/src/Bruch.java
new file mode 100644
index 0000000..8679bcd
--- /dev/null
+++ b/u20/src/Bruch.java
@@ -0,0 +1,127 @@
+import java.util.Objects;
+
+
+/**
+ * Speichert einen Bruch aus zwei integern ab
+ * @author p8q-yhw-u1
+ *
+ */
+public class Bruch {
+
+ private int zaehler;
+ private int nenner;
+
+ /**
+ * Erzeugt ein Bruch Objekt mit Zähler und Nenner
+ * @param zaehler
+ * @param nenner
+ */
+ public Bruch(int zaehler, int nenner) {
+ this.setZaehler(zaehler);
+ this.setNenner(nenner);
+ }
+
+ /**
+ * Setzt den Zähler des Bruchs
+ * @param zaehler
+ */
+ public void setZaehler(int zaehler) {
+ this.zaehler = zaehler;
+ }
+
+ /**
+ * Setzt den Nenner des Bruchs
+ * @param nenner darf nicht 0 sein
+ */
+ public void setNenner(int nenner) {
+ if (nenner == 0) {
+ throw new IllegalArgumentException("Nenner darf nicht 0 sein");
+ }
+ this.nenner = nenner;
+ }
+
+ /**
+ * Liefert den Zähler des Bruchs
+ * @return Zähler
+ */
+ public int getZaehler() {
+ return this.zaehler;
+ }
+
+ /**
+ * Liefert den Nenner des Bruchs
+ * @return Nenner
+ */
+ public int getNenner() {
+ return this.nenner;
+ }
+
+ /**
+ * Liefert den Bruch als Dezimalzahl
+ * @return
+ */
+ public double zahl() {
+ return (double) this.zaehler / this.nenner;
+ }
+
+ /**
+ * Vergleicht Bruch auf Gleichheit mit einem anderen Objekt beliebiger Art
+ * Liefert false wenn das Objekt nicht vom Typ Bruch ist
+ */
+ @Override
+ public boolean equals(Object b) {
+ return b instanceof Bruch ? this.equals((Bruch) b) : false;
+ }
+
+ /**
+ * Überprüft Bruch mit einem anderen Bruch auf Gleichheit
+ * @param b der zu vergleichende Bruch
+ * @return true falls die beiden Brüche die gleiche Zahl ausdrücken
+ */
+ public boolean equals(Bruch b) {
+ return this.zaehler * b.nenner == this.nenner * b.zaehler;
+ /*
+ * Alternative Implementierung wäre
+ * return this.hashCode() == b.hashCode();
+ * allerdings deutlich ineffizienter
+ */
+ }
+
+ /**
+ * Liefert den Bruch in gehashter Form
+ */
+ @Override
+ public int hashCode() {
+ /* Absolute Werte bestimmen
+ * Um redundanz zu vermeiden und Rechenleistung zu sparen
+ * werden sie in temporären Variablen gespeichert
+ */
+ int absZ = Math.abs(this.zaehler);
+ int absN = Math.abs(this.nenner);
+
+ /*
+ * Größten gemeinsamen Teiler bestimmen
+ */
+ int i;
+ for (i = Math.min(absZ, absN); i > 0; i--) {
+ if (absZ % i == 0 && absN % i == 0) {
+ break;
+ }
+ }
+
+ /*
+ * Vorzeichen bestimmen
+ */
+ if (this.zaehler < 0) i *= -1;
+ if (this.nenner < 0) i *= -1;
+
+ /*
+ * Hash des Bruchs berechnen.
+ * Wenn negativ wird immer der Zähler als negativ angegeben, nie der Nenner.
+ * Sorgt dafür dass -1/2 == 1/-2
+ */
+ return Objects.hash(absZ / i, absN / Math.abs(i));
+ }
+
+
+}