# Brüche kürzen



## j0k3r87 (27. Nov 2012)

Hallo liebe Community,

ich habe folgendes Problem: Ich habe ein Programm geschrieben mit dem man Brüche multiplizieren und addieren kann. Nun würde ich gerne noch eine Methode implementieren die mir automatisch die eingegebenen Brüche so weit wie möglich kürzt und dann ausgeben wird. 

So weit bin ich bisher: 


```
class Bruch {
    // Deklaration der Attribute
    private int Zaehler;
    private int Nenner;

    // Konstruktor
    Bruch (int z, int n)
    {   Zaehler = z;
        Nenner = n;
    }

    // Methoden zum Zugriff
    public void setZaehler (int z)
    {   Zaehler = z; }

    public void setNenner (int n)
    {   Nenner = n; }

    public int getZaehler ()
    {   return Zaehler; }

    public int getNenner ()
    {   return Nenner; }

    // Methoden zur Berechnung
    public Bruch Multiplikation (Bruch bruch2)
    {
        Bruch ergebnis = new Bruch(0,0);
 
        ergebnis.setZaehler(Zaehler * bruch2.getZaehler());
        ergebnis.setNenner(Nenner * bruch2.getNenner());

         return ergebnis;
    }

    public Bruch Addition (Bruch bruch2)
    {
       int zaehler_neu;
       zaehler_neu =  Zaehler * bruch2.getNenner() + Nenner * bruch2.getZaehler();
      
       int nenner_neu;
       nenner_neu = Nenner * bruch2.getNenner();
 
       Bruch ergebnis = new Bruch (0,1);
       ergebnis.setZaehler(zaehler_neu);
       ergebnis.setNenner (nenner_neu);
   
       return ergebnis;
    }
}

// Hauptprogramm
class Programm {

   public static void main (String[] args)
   {    Bruch B1 = new Bruch (3,2);
        Bruch B2 = new Bruch (2,4);
        Bruch B3, B4;
        
        while (zaehler)
        
        B3 = B1.Multiplikation(B2);

        System.out.print(" 3/2 * 2/4 = ");
        System.out.println(B3.getZaehler() + "/" + B3.getNenner());

        B4 = B1.Addition(B2);

        System.out.print(" 3/2 + 2/4 = ");
        System.out.println(B4.getZaehler() + "/" + B4.getNenner());

   }
}
```

hoffe ihr könnt mir helfen


----------



## bERt0r (27. Nov 2012)

Nun, als erstes würd ich mal eine Funktion public void kuerzen() schreiben.


----------



## j0k3r87 (27. Nov 2012)

hab ich ja auch schon gemacht mein versuch mit dem euklidischen algorithmus funktionierte aber nicht


----------



## Marcinek (27. Nov 2012)

Was bedeutet funktioniert nicht?


----------



## Landei (27. Nov 2012)

Soweit ich weiß, funktioniert der Euklidische Algorithmus seit über zweitausend Jahren tadellos, es muss wohl an deinem Code liegen. Den wir nicht korrigieren können, wenn wir ihn nicht sehen.


----------



## j0k3r87 (27. Nov 2012)

also wie gesagt habe die methode schon geschrieben, das war auch nicht das problem. nur weiss ich nicht so recht wie ich die mit den anderen methoden verknüpfe 


```
private void kuerzen(){
			//Berechnung des ggT
			int z=Zaehler;
			int n=Nenner;
			int r=Zaehler%Nenner;
			 
			while(r>0){
			z=n;
			n=r;
			r=z%n;
			}
			 
			//Kürzen des Bruches
			Zaehler /= n;
			Nenner /= n;
```


----------



## Landei (28. Nov 2012)

Dafür gibt es mehrere Lösungsmöglichkeiten. Ich würde die beiden setter komplett entfernen, dann reicht es, kuerzen() als letztes im Konstruktor aufzurufen. Deine Addition und Multiplikation musst du dann natürlich ein wenig umschreiben, in dem du den Bruch auch wirklich im Konstruktor initialisierst (was ja sein Job ist), etwa:


```
public Bruch mal(Bruch bruch2) {
    return new Bruch(
        getZaehler() * bruch2.getZaehler(),
        getNenner() * bruch2.getNenner()
    );
}
```

Übrigens Variablen- und Methodennamen bitte klein schreiben.


----------



## j0k3r87 (28. Nov 2012)

aber wenn ich kuerzen chon im konstruktor aufrufe sind doch dann die ergebnisse nicht gekürzt, oder?


----------



## SlaterB (28. Nov 2012)

was soll man auf so eine oder-Frage antworten?

am Ende des Konstruktors kuerzen() aufzurufen, kann doch nur den Sinn haben, 'Ergebnisse', also den Zustand des eigenen Objektes zu kürzen,
wenn nicht, dann kann man sich den Aufruf gleich sparen..


----------



## j0k3r87 (28. Nov 2012)

erstmal danke für eure antworten. java programmierung fällt mir momentan noch schwer, bin kompletter anfänger

könnte mir jemand  bitte folgende fragen beantworten:

1. ist meine methode kuerzen() aus post #6 richtig?
2. wie implementiere ich diese in den Konstruktor?
3. inwieweit muss ich dann meine Rechnungen modifizieren?

Velen Dank


----------



## Landei (28. Nov 2012)

Du "implementierst" sie nicht im Konstruktor, du packst sie in die Klasse und rufst sie im Konstruktor auf, einfach [c]kuerzen();[/c] als letzte Zeile.


----------



## j0k3r87 (28. Nov 2012)

Jetzt funktioniert es ! Stand etwas auf dem Schlauch ;-) Vielen vielen Dank an euch alle


----------

