Informatik Bruchrechner (Addition) hilfe?

3 Antworten

  1. Du hast zwei aufeinanderfolgende return-Befehle in deiner Methode. Der zweite Befehl wird also nie ausgeführt, ist redundant.
  2. Du versuchst ein undefiniertes Symbol Zaehler zu nutzen. Wo hast du diese Methode denn definiert?

Methodennamen sollten übrigens mit einem Kleinbuchstaben beginnen und eine Tätigkeit ausdrücken, die ihren tatsächlichen Zweck beschreibt.

httpalena  16.12.2019, 22:10

Er returnt ein Objekt. Also das ist keine Methode sondern ein Konstruktor

0
regex9  16.12.2019, 22:14
@httpalena

Ein Konstruktoraufruf außerhalb der Klasse kann nur nach dem new-Operator folgen und eine Methode kann ebenfalls ein Objekt zurückgeben. Bitte schau dir die erwähnten Themen (Konstruktoren, Methoden) nochmal in Büchern / Tutorials an.

0
httpalena  16.12.2019, 22:23
@regex9

Aber eine Methode wird ja wohl nicht groß geschrieben :D dachte ich. Daher ist meine Schlussfolgerung dass Nenner und Zähler Konstruktoren sind

Naja bin auch nicht die beste Programmierern. :D Also kann ich nicht 100% hinter dem stehen was ich sage. Aber das ist so meine Ansicht

0
regex9  16.12.2019, 22:42
@httpalena

Technisch betrachtet ist es egal, ob die Bezeichner mit Groß-Kleinbuchstaben beginnt oder nicht (so lange man sie nach erster Benennung stringent hält). Nach Java-Konvention schreibt man Klassennamen mit einem Großbuchstaben - und daher auch Konstruktoren (dann auch technisch bedingt, da der Konstruktor den gleichen Namen wie die Klasse haben muss).

Wären Nenner oder Zaehler jeweils Konstruktoren, müssten sie wie gesagt nach einem new-Operator aufgerufen werden, denn der schafft erst den Speicher für die neuen Objekte.

new Nenner(/* ... */);
new Zaehler(/* ... */);

Wie du erkannt hast, erwartet die add-Methode ein Objekt vom Typ Bruch als Rückgabewert. Das heißt, selbst wenn der Aufruf so wie in meinem Snippet erfolgen würde, wäre es unlogisch, denn ein Objekt Nenner und auch ein Objekt Zaehler ist jeweils kein Bruch. Nicht einmal eine Subklasse dessen.

Folgendermaßen könnte man nun nur noch eine Methode dahinter vermuten, die einfach ziemlich schlecht benannt wurde.

public Bruch Nenner(/* ... */) {
  return new Bruch(/* ... */);
}

// same for Zaehler ...

Aber wie dem auch sei: Letztendlich bleiben die Symbole Nenner / Zaehler undefiniert und bedürfen Aufklärung. Ob die vom FS kommt, ist abzuwarten. Einen Lösungsvorschlag habe ich unten bereits gegeben.

Sollte es sich doch um Konstruktoren handeln, könnte diese Modifikation vorgenommen werden:

Zaehler ergebnisZaehler = // get result for Zaehler ...
Nenner ergebnisNenner = // get result for Nenner ...
return new Bruch(ergebnisZaehler, ergebnisNenner);

und eine passende Überladung des Bruch-Konstruktors müsste definiert werden.

Sollten die Objekte Zaehler / Nenner entsprechende Getter bereitstellen (die den konkreten numerischen Wert liefern), könnte man sich die Überladung auch sparen:

Zaehler ergebnisZaehler = // get result for Zaehler ...
Nenner ergebnisNenner = // get result for Nenner ...
return new Bruch(ergebnisZaehler.gibWert(), ergebnisNenner.gibWert());
1
httpalena  16.12.2019, 22:57
@regex9

:D ja deine Antwort klingt sehr logisch. Ich verstehe generell nicht warum er oben für Nenner und Zähler eigene Klassen gemacht haben wenn es theoretisch eh nur integer oder Double Werte sind 🤔

1
httpalena  16.12.2019, 22:11

Außerdem verlangt die Methode nach einem returnwert Bruch und nicht nach Zähler oder Nenner

0

Also ich weiß ja nicht genau was bei dir Zähler und Nenner sind. Aber Methoden sind das nicht.

httpalena  16.12.2019, 22:01

Ok mein Fehler. Ich nehme mal an das sind Konstruktoren?

0
regex9  16.12.2019, 22:08
@Thomlol

Wohl kaum. Ein Zaehler ist kein Bruch und ein Nenner ist es auch nicht. Des Weiteren würde dann der new-Operator fehlen.

0
regex9  16.12.2019, 22:16
@httpalena

Da hast du gerade unter der falschen Person kommentiert. 😉

0
httpalena  16.12.2019, 22:20
@regex9

Haha ja ups. Die Website kann teilweise echt verwirrend sein

0
regex9  16.12.2019, 22:26
@Thomlol

Bitte zeige einmal die Definitionen von Nenner und Zaehler.

An sich würde es ja ausreichen, mit den vorhandenen Symbolen in der Methode zu arbeiten.

public Bruch add(int pz, int pn, int z2, int n2) {
  // calculate ...
  return new Bruch(ergebnisZaehler, ergebnisNenner);
}

Wobei die Variablen ergebnisZaehler und ergebnisNenner die jeweiligen berechneten Werte für Zähler und Nenner speichern.

Generell solltest du einmal schauen, bessere Bezeichner zu vergeben. pz, pn, ... sind nichtssagend. Außerdem vermischt du englische Namen (add) mit deutschen Namen (Bruch, Zaehler, ...). Das macht dein Programm nur mehr wirr und unleserlich.

0

Es tut mir leid, das zu sagen, aber leider kann man fast nichts auf den Bild erkennen... :(

httpalena  16.12.2019, 21:57

Klicke auf original Bild anzeigen :)

2
Eleni007  16.12.2019, 21:58
@httpalena

Habe ich schon versucht... Und was rauskam, kannst du dir Bestimmt denken :(

0