u20
This commit is contained in:
parent
972af6a3ba
commit
3775c742da
Binary file not shown.
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<classpath>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="module" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="src" path="src"/>
|
||||||
|
<classpathentry kind="output" path="bin"/>
|
||||||
|
</classpath>
|
|
@ -0,0 +1 @@
|
||||||
|
/bin/
|
|
@ -0,0 +1,17 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>u20</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
|
@ -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
|
|
@ -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));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue