diff --git a/uebung02/rationals/Rational.java b/uebung02/rationals/Rational.java new file mode 100644 index 0000000..03e957a --- /dev/null +++ b/uebung02/rationals/Rational.java @@ -0,0 +1,122 @@ +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)); + } + +} diff --git a/uebung02/rationals/RationalDemo.java b/uebung02/rationals/RationalDemo.java new file mode 100644 index 0000000..190c9e2 --- /dev/null +++ b/uebung02/rationals/RationalDemo.java @@ -0,0 +1,23 @@ +package uebung02.rationals; + +public class RationalDemo { + public static void main(String[] args) { + Rational r1 = new Rational(1, 2); + Rational r2 = new Rational(2, 4); + Rational r3 = new Rational(6, 18); + Rational r4 = new Rational(3, 12); + Rational r5 = new Rational(1); + Rational r6 = new Rational(2); + Rational r7 = new Rational(4, 3); + + System.out.println("1/2 = " + r1); + System.out.println("2/4 = " + r2); + System.out.println("6/18 = " + r3); + System.out.println("1/2 + 2/4 = " + r1.add(r2)); + System.out.println("1/2 - 6/18 = " + r1.sub(r3)); + System.out.println("6/18 * 2/4 = " + r3.mult(r2)); + System.out.println("1/2 == 2/4 ? " + r1.isEqual(r2)); + System.out.println("2/4 == 3/12 ? " + r2.isEqual(r4)); + System.out.println("1 + 2 / (4/3) = " + r5.add(r6.div(r7))); + } +}