public class Bruch {

    private int zaehler;
    private int nenner;

    Bruch() {
        zaehler = 0;
        nenner = 1;
    }

    Bruch(int x) {
        zaehler = x;
        nenner = 1;
    }

    Bruch(int x, int y) {
        zaehler = x;
        nenner = y;
    }

    void setZaehler(int z) {
        zaehler = z;
    }

    void setNenner(int n) {
        nenner = n;
    }

    int getZaehler() {
        return zaehler;
    }

    int getNenner() {
        return nenner;
    }

    String bruchToString() {
        return zaehler + "/" + nenner;
    }

    void ausgeben() {
        System.out.println(zaehler + "/" + nenner);
    }

    void kuerzen() {
        int m, n, r;
        m = Math.abs(zaehler);
        n = Math.abs(nenner);
        r = m % n;
        while (r > 0) {
            m = n;
            n = r;
            r = m % n;
        }
        zaehler /= n;
        nenner /= n;
    }

    void gekuerztausgeben() {
        kuerzen();
        ausgeben();
    }

    Bruch multipliziere(Bruch m) {
        var z = zaehler * m.zaehler;
        var n = nenner * m.nenner;
        return new Bruch(z, n);
    }

    boolean equals(Bruch x) {
        var a = new Bruch(this.zaehler, this.nenner);
        var b = new Bruch(x.zaehler, x.nenner);
        a.kuerzen();
        b.kuerzen();
        return (a.zaehler == b.zaehler) && (a.nenner == b.nenner);
    }

    // Neue Methode: Addition
    Bruch addiere(Bruch b) {
        int neuerZaehler = this.zaehler * b.nenner + b.zaehler * this.nenner;
        int neuerNenner = this.nenner * b.nenner;
        return new Bruch(neuerZaehler, neuerNenner);
    }

    // Neue Methode: Subtraktion
    Bruch subtrahiere(Bruch b) {
        int neuerZaehler = this.zaehler * b.nenner - b.zaehler * this.nenner;
        int neuerNenner = this.nenner * b.nenner;
        return new Bruch(neuerZaehler, neuerNenner);
    }

    // Neue Methode: Dezimalwert
    double dezimalwert() {
        if (nenner == 0) {
            System.out.println("Error Divided by 0");
            return 0;
        } else {
            return (double) zaehler / nenner;
        }
    }
}
