Brüche kürzen

j0k3r87

Mitglied
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:

Code:
 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 🙂
 
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.
 
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 🙁

HTML:
			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;
 
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:

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

Übrigens Variablen- und Methodennamen bitte klein schreiben.
 
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..
 
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
 
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.
 

Zurück
Oben