Bruch Konstruktor

Hadyaner

Mitglied
Hey, habe nach langem mal wieder eine Aufgabe bekommen, die ich komplett nicht verstehe, da ich die letzen Wochen nicht in der Uni war (krankheitsbedingt)
Hier die Aufgabe :

Schreiben Sie eine Klasse Bruch, die eine Bruchzahl mit ganzzahligem Zähler und Nenner darstellt.
Schreiben Sie folgende Methoden:
• Zwei sinnvolle Konstruktoren,
• Getter für Zähler und Nenner,
• Setter für Zähler und Nenner mit Überprüfung auf korrekte Parameter,
• eine Methode, die den Wert als Dezimalzahl vom Typ double zurück gibt,
• equals,
• hashCode.

Randbedingungen:
• Ihre Klasse muss verhindern, dass der Nenner jemals Null ist.
• Ihre equals-Methode darf für die Brüche 1 / 2 und 2 / 4 false zurück geben. Auch die Hashcodes
können unterschiedlich sein. Für zwei Brüche mit jeweils identischem Zähler und Nenner muss
equals true zurück geben und die Hashcodes müssen gleich sein.

Leider versteh ich nur Bahnhof .... könnte mir jemand dabei helfen ?
 
Leider versteh ich nur Bahnhof .... könnte mir jemand dabei helfen ?
Dann wird es Zeit für ein Java-Lehrbuch und die Suchfunktion dieses Forums 😉

Nein wirklich, irgendwas davon musst du doch schon mal gehört haben?! Getter und Setter, Konstruktoren, equals(), double, null … Das liegt doch jetzt nicht an einer Woche Krankgewesensein. Wenn du nichts davon kennst, fehlen ganz klar die Grundlagen.

Edit: Ok, sorry, hab mich mit der Woche verlesen. Dennoch gilt weiterhin: Es ist nicht Aufgabe des Forums, dir Java-Basiswissen beizubringen - das musst du dir selbst anlesen.
 
Zuletzt bearbeitet:
Hast du denn schon ein kleines bisschen Code, das du zeigen kannst? Weißt du, wie eine Klasse aufgebaut ist, und könntest du das exemplarisch für diese Klasse beschreiben?
 
Natürlich weiß ich, wie ich eine Klasse schreibe etc. ich weiß nur nicht wie ich einen Getter und Setter initalisiere und das auch noch mit Brüchen ?
 
Getter und Setter sind nichts Magisches, sondern ganz normale Java-Methoden, falls du wegen der Begrifflichkeiten verwirrt bist. Sie werden bloß meist mit diesen Begriffen herausgestellt, weil man damit alle Methoden meint, die auf die Instanzvariablen eines Objekts zugreifen und diese lesen (get) oder verändern (set) können.
 
Hier eine kleine Starthilfe...: Wenn du mit der Aufgabenstellung aber garnicht klar kommst, dann hast du eine Menge aufzuholen... bzw. vllt den Kurs im nächsten Semester nochmal belegen.

Ansonsten überlege dir vor einer Aufgabe erst einmal was zu tun ist. Du sollst quasi nichts anderes machen, als eine Bruchzahl darzustellen. Woraus besteht eine Bruchzahl? -> Zähler und einem Nenner! Sowie einem Bruchstrich. Also, ist es schonmal gut, diese als Konstanten bzw. Instanzvariablen der Klasse zu setzen. Was passiert, wenn der Zaehler eine 0 hat? Oder wenn der Nenner eine 0 bekommt??? -> Beim ersten wird der komplette Bruch gekürzt auf 0 herauskommen... beim 2. verletzt dies eine Mathematische Bedingung, da nicht durch 0 geteilt werden darf! Wie kann man einen Bruch kürzen? (falls dies auch in der aufgabe enthalten ist)...genau, man braucht einen einen größten gemeinsamen Teiler.... usw usf

Hier ein Ansatz:
Java:
public class Bruchzahl {
	
	/* Instanzvariable einer Instanz. */
	private int zaehler;
	private int nenner;
	private final char bruch = "/";
	private int ganzzahl;

	
	/* Konstruktor fuer einen zaehler sowie nenner. */
	public Bruchzahl(int zaehler, int nenner) {
		this.zaehler = zaehler;
		this.nenner = nenner;
	}

	/* Konstruktor fuer einen zaehler "ohne" nenner. */
	public Bruchzahl(int zaehler) {
		this.zaehler = zaehler;
		this.nenner = 1;
	}

	/* Gibt Zaehler wieder. */
	public int gibZaehler() {
		return this.zaehler;
	}

	/* Gibt Nenner wieder. */
	public int gibNenner() {
		return this.nenner;
	}

	/* Gibt Bruch wieder. */
	public String gibBruch() {
		return this.zaehler + this.bruch + this.nenner;
	}

	/* Setzt Zaehler sowie nenner einem gewissen Wert zu. */
	public void setzeZaehlerUndNenner(int zaehler, int nenner) {
		if (zaehler == 0) {
			this.ganzzahl = 0;
		} else if  (nenner == 0) {
			this.ganzzahl = -1; 
		} else {
			this.zaehler == zaehler;
			this.nenner == nenner;
		}			 		
	}
		
}
 
@b1zarRe, dein Code wird nicht mal kompilieren.
Code:
setzeZaehlerUndNenner
ist auch irgendwie ziemlich kryptisch und falsch.
Code:
gibBruch
sollte besser in
Code:
toString
umbenannt werden und die überflüssigen
Code:
this
kannst du auch weglassen.
 
Es ging hierbei nicht darum, dem Threadersteller ein fertiges Programm zu liefern, sondern einen ANSATZ zu schreiben. Dies habe ich grad in paar Minuten gemacht und ohne es selbst mal laufen zu lassen oder so. Deswegen auch nicht vollständig... aber stimmt, dass mit char muss natürlich in '' und nicht "". Klar, kann man this weglassen... ich finde es aber immer übersichtlicher this.nenner = nenner(parameter) zu schreiben, als nenner = nenner. Auch ist die Namenswahl toString wohl noch aussagekräftiger, dass stimmt.

Mir gings es aber eher darum, wie gesagt, ihm einen Ansatz zu geben und nicht ein fehlerfreies Programm auszuhändigen.
 
Klar, kann man this weglassen... ich finde es aber immer übersichtlicher this.nenner = nenner(parameter) zu schreiben, als nenner = nenner.
Ne, nenner = nenner wäre falsch. Ich meinte das eher bei den Gettern und nicht Settern.
Auch ist die Namenswahl toString wohl noch aussagekräftiger, dass stimmt.
Es geht hier auch nicht um die Namenswahl, sondern darum, dass du eine Methode von
Code:
Object
überschreibst. Dann kannst du auch bei
Code:
System.out.println(einBruch)
machen und eine sinnvolle Ausgabe bekommen.
 
• Zwei sinnvolle Konstruktoren

1. Zähler + Nenner und 2. eine Zahl, der der man einen Bruch erstellen kann. Ob jetzt ein Konstruktor sinnvoll ist, der mir aus 7 -> 7/1, 5 -> 5/1, 3 -> 3/1 erstellt, glaube ich nicht. Bei den Konstruktoren mußt du auch Parameter prüfen, also hier die Setter von unten nutzen.

• Getter für Zähler und Nenner,

int getNenner(), int getZaehler() auf die Instanzvariablen

• Setter für Zähler und Nenner mit Überprüfung auf korrekte Parameter,

setNenner(), setZaehler() auf die Instanzvariablen, schmeiß IllegalArgumentExceptions, wenn die Parameter nicht korrekt sind. Wobei Brüche eigentlich imutable sein könnten...

• eine Methode, die den Wert als Dezimalzahl vom Typ double zurück gibt,

double berechne() oder weis der Geier was.


die equals-Methode von Objekt überschreiben. Naja, was unterscheidet Brüche voneinander? Paß hier auf, weil jemand dir zum vergleichen eines Bruches auch ein Objekte der Klasse Apfel oder Ei unterschieben kann.


Objekte die equals sind, haben den gleichen Hashcode, auch bei mehrmaligem Aufruf der Hashfunktion. Aber Objekte mit gleichen Hashcode müssen nicht equals sein! Viel Spaß beim knobeln an der Hashfunktion (du mußt int's erzeugen)

Randbedingungen:
• Ihre Klasse muss verhindern, dass der Nenner jemals Null ist.

in dem setter halt, mit if prüfen

• Ihre equals-Methode darf für die Brüche 1 / 2 und 2 / 4 false zurück geben.

damit wird's leichter

Auch die Hashcodes können unterschiedlich sein. Für zwei Brüche mit jeweils identischem Zähler und Nenner muss
equals true zurück geben und die Hashcodes müssen gleich sein.

auch damit hast Du einige Probleme weniger.

P.S.: lass Dir die Aufzeichnungen der Vorlesungen geben, die du versäumt hast.
 
Sorry jungs -.- mir ist ein Fehler unterlaufen, dass ist erst die Aufgabe für in 2 Wochen, deswegen kam mir das alles ein bisschen komisch vor, weil wir das noch garnicht in der Vorlesung hatten. Ich werde den Topic dann wieder öffnen, aber danke für die schnelle Hilfe, echt ein Top Forum =)
 

Zurück
Oben