u20 euklidischer algorithmus
This commit is contained in:
parent
3775c742da
commit
cf145ceeed
Binary file not shown.
|
@ -87,40 +87,49 @@ public class Bruch {
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Findet mittels des Euklidischen Algorithmus den größten
|
||||||
|
* gemeinsamen Teiler des Zählers und des Nenners des Bruchs
|
||||||
|
* @return Größter gemeinsamer Teieler
|
||||||
|
*/
|
||||||
|
public int getGgT() {
|
||||||
|
int z = Math.abs(this.zaehler);
|
||||||
|
int n = Math.abs(this.nenner);
|
||||||
|
|
||||||
|
if (z == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (n != 0) {
|
||||||
|
if (z > n) {
|
||||||
|
z -= n;
|
||||||
|
} else {
|
||||||
|
n -= z;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return z;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Liefert den Bruch in gehashter Form
|
* Liefert den Bruch in gehashter Form
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
/* Absolute Werte bestimmen
|
int ggt = this.getGgT();
|
||||||
* Um redundanz zu vermeiden und Rechenleistung zu sparen
|
int sign = 1;
|
||||||
* 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
|
* Vorzeichen bestimmen
|
||||||
*/
|
*/
|
||||||
if (this.zaehler < 0) i *= -1;
|
if (this.zaehler < 0) sign *= -1;
|
||||||
if (this.nenner < 0) i *= -1;
|
if (this.nenner < 0) sign *= -1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Hash des Bruchs berechnen.
|
* Hash des Bruchs berechnen.
|
||||||
* Wenn negativ wird immer der Zähler als negativ angegeben, nie der Nenner.
|
* Wenn negativ wird immer der Zähler als negativ angegeben, nie der Nenner.
|
||||||
* Sorgt dafür dass -1/2 == 1/-2
|
* Sorgt dafür dass -1/2 == 1/-2
|
||||||
*/
|
*/
|
||||||
return Objects.hash(absZ / i, absN / Math.abs(i));
|
return Objects.hash(Math.abs(this.zaehler) / ggt * sign, Math.abs(this.nenner) / ggt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue