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