oopuebung/uebung02/rationals/Rational.java
2025-04-28 15:16:11 +02:00

123 lines
2.6 KiB
Java

package uebung02.rationals;
public class Rational {
private final int num, denom;
Rational(int num, int denom) {
if (denom == 0) {
throw new IllegalArgumentException("Zahl darf nicht 0 sein!");
} else {
int gcd = gcDivider(num, denom);
if (denom < 0) {
this.num = -num / gcd;
this.denom = -denom / gcd;
} else {
this.num = num / gcd;
this.denom = denom / gcd;
}
}
}
Rational (int num) {
this(num, 1);
}
private int gcDivider(int x, int y) {
//return x == 0 ? y : gcDivider(y % x, x);
if (x == 0) {
return y;
} else {
return gcDivider(y % x, x);
}
}
public int getNum() {
return num;
}
public int getDenom() {
return denom;
}
public Rational add(Rational other) {
return new Rational(num * other.getDenom() + denom * other.getNum(),
denom * other.getDenom());
}
public Rational add(int i) {
return add(new Rational(i));
}
public Rational sub(Rational r) {
return new Rational(num * r.denom - denom * r.num, denom * r.denom);
}
public Rational sub(int i) {
return this.sub(new Rational(i));
}
public Rational mult(Rational r) {
return new Rational(num * r.num, denom * r.denom);
}
public Rational mult(int i) {
return mult(new Rational(i));
}
public Rational div(Rational r) {
return new Rational(num * r.denom, denom * r.num);
}
public Rational div(int i) {
return div(new Rational(i));
}
@Override
public String toString() {
if (denom == 1) {
return "" + num;
} else {
return num + "/" + denom;
}
}
public boolean lessThan(Rational r) {
return this.sub(r).num < 0;
}
public boolean lessThan(int i) {
return this.sub(i).num < 0;
}
public boolean greaterThan(Rational r) {
return this.sub(r).num > 0;
}
public boolean greaterThan(int i) {
return this.sub(i).num > 0;
}
public boolean lessThanOrEqual(Rational r) {
return this.sub(r).num <= 0;
}
public boolean lessThanOrEqual(int i) {
return this.sub(i).num <= 0;
}
public boolean greaterThanOrEqual(Rational r) {
return this.sub(r).num >= 0;
}
public boolean isEqual(Rational r) {
return this.num == r.num && this.denom == r.denom;
}
public boolean isEqual(int i) {
return this.isEqual(new Rational(i));
}
}