Erste Schritte Ausgabeproblem bei Bruchrechnung

Chloe

Mitglied
Abend.^^

Ich habe eine Aufgabe bei Eclipse bekommen bei der ich die Grundrechenarten mit Brüchen programmieren soll. Diese sollen dann gekürzt wieder ausgegeben werden. Leider stell ich mich grade etwas blöd mit der Ausgabe an.

Java:
public class Bruch 
{
	/**
	 * @param args
	 * @author
	 * @version 1.0
	 */
	
	public int zaehler;
	public int nenner;
	
	public Bruch()
	{
		zaehler=1;
		nenner=1;
	}
	
	public Bruch (int zaehler, int nenner)
	{
		this.zaehler=zaehler;
		this.nenner=nenner;
	}
	
	/**
	 * Wir für kürzen benötigt. Bestimmt den Größten gemeinsamen Teiler.
	 * @param a
	 * @param b
	 * @return
	 */
	public int euklid(int a,int b)
	{
		/**
		 * Der Nenner muss größer als der Zähler sein, ansonsten
		 * werden die Werte getauscht.
		 */
		if(b>a)
		{
			int tausche=a;
			a=b;
			b=tausche;
		}
		int merke=a%b;
		
		/**
		 * a und b werden so lange miteinander dividiert, bis es nicht mehr geht,
		 * der letzte Restwert ist dann der ggT.
		 */
		while (b!=0)
		{
			merke=a%b;
			a=b;
			b=merke;
		}
		return a;
	}
	
	void kuerzen()
	{
		int ggT=0;
		
		if(zaehler>nenner)
		{
			ggT=euklid(zaehler,nenner);
		}
		else
			ggT=euklid(nenner,zaehler);
			
			zaehler=zaehler/ggT;
			nenner=nenner/ggT;
	}
	
	void print()
	{
		System.out.println(zaehler + "/" + nenner);
	}
	
	Bruch plus(Bruch b)
	{
		this.zaehler=this.zaehler*b.nenner+b.zaehler*this.nenner;
		this.nenner=this.nenner*b.nenner;
		this.kuerzen();
		return this;
	}
	
	Bruch minus(Bruch b)
	{
		this.zaehler=this.zaehler*b.nenner-b.zaehler*this.nenner;
		this.nenner=this.nenner*b.nenner;
		this.kuerzen();
		return this;
	}
	
	Bruch mal(Bruch b)
	{
		this.zaehler=this.zaehler*b.zaehler;
		this.nenner=this.nenner*b.nenner;
		this.kuerzen();
		return this;
	}
	
	
	Bruch geteilt(Bruch b)
	{
		this.zaehler=this.zaehler*b.zaehler;
		this.nenner=this.nenner*b.nenner;
		this.kuerzen();
		return this;
	}
	
	
	
	boolean istGroesser(Bruch b1,Bruch b2)
	{
		return (b1.zaehler+b2.nenner>b2.zaehler+b1.nenner);
	}
	
	boolean istKleiner(Bruch b1,Bruch b2)
	{
		return (b1.zaehler+b2.nenner<b2.zaehler+b1.nenner);
	}
	
	boolean istGleich(Bruch b1,Bruch b2)
	{
		return (b1.zaehler+b2.nenner==b2.zaehler+b1.nenner);
	}
	
	
	public static void main(String[] args) 
	{
		
	}

}


Hier das main dazu, und zu meinem Ausgabeproblem:
Java:
public class BruchTest extends Bruch
{

	/**
	 * @param args
	 * @author
	 * @version 1.0
	 */
	
	public static void main(String[] args) 
	{
		Bruch b1 = new Bruch(5,3);
		Bruch b2 = new Bruch(12,8);
		
		System.out.println(b1.istGroesser(b1, b2));
		System.out.println(b1.plus(b2));
		
	}

}


Danke im Voraus.^^
 

Chloe

Mitglied
Das Problem ist, dass ich grade auf dem Schlauch stehe wie ich die Ausgabe richtig gestalte. Ich soll mir zwei Brüche nehmen und damit die Methoden aufrufen. Im main steht ja auch schon, was ich schon mehrfach versucht hatte, aber leider ist es falsch.
Ich würde mich einfach sehr über einen kleinen Denkanstoß freuen.^^
 

Chloe

Mitglied
Im Endeffekt möchte ich bloß da zu stehen haben: "Die Summer der Brüche ist ...(dann halt das errechnete)". Das halt für alle Methoden, aber ein Beispiel reicht ja vollkommen.^^
 

AndiE

Top Contributor
In der Lösung sind noch Logikfehöer enthalten, besonders bei den Vergleichen. Aber ich würde die Klasse anders entwerfen. Eine der Grundlagen von OOP ist ja die Kapselung. Du kapselst die Daten als Eigenschaften und läßt den Zugriff über Methoden zu.
Daher würde ich nicht jeder Methode einen Rückgabewert geben.

Mein Vorschlag:

Java:
class bruch {
  private int z;
  private int n;
 
//Eingabe
  public void Bruch(int ne, int ze)
{
this.z=ze;
this.n=ne;
}

//Ausgabe
 public String ausgabe()
{
 System.out.println("Ergebnis"+z+"/"+n);
}

//Operationen

public void Add(Bruch bruch){
...
}

public void Sub( Bruch bruch) {
}

// usw. ...
}

Damit sind die Daten gekapselt und nur über Methoden erreichbar.

In der main steht dann;

Java:
public static main() {

bruch1 = new Bruch(1,2);
bruch2=new Bruch(1,4);
bruch1.Add(bruch2);
bruch1.ausgabe();

}

Ich würde dieses System der selbstgeschriebenen Ausgabemethode wählen, weil es für einen Anfänger beherrschbarer ist. Es geht auch so, wie du wolltest, aber dazu muss eine "ToString"-Methode in deiner Klasse angelegt werden. Aber da musst du in der Beschreibung nachlesenm wie das genau geht.
 

Ähnliche Java Themen


Oben