Bullet1990
Mitglied
Sorry, hab mir dein Profilbild nicht angesehen. Bin dann automatisch davon ausgegangen, dass du ein Programmierer bist, da Programmiererinnen ein seltenes Gut sind@sheel
Ich möchte die Rechenoperationen wie gesagt irgendwie zusammenfassen, das ist die erste Gruppe. Addition direkt von Calculator abzuleiten hilft auch nicht.
Wenn ich den Stack direkt im Konstruktor besetze, klappts, ansonsten erbt Addition nen leeren Stack.
Ich muss es also so hinkriegen, dass zwar alle auf denselben Stack zugreifen (Vererbung?) aber trotzdem zur Laufzeit der Stack verändert werden kann...
![Big grin :D :D](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f600.png)
Du könntest doch etwas anders vorgehen, das würde vermutlich auch dein Stack-Problem lösen. Ich würde die Klasse Calculator gar nicht erst an andere Klassen vererben. (So habe ich es zumindest aus deinem letzten Post verstanden).
Wie Sheel auch schon gefragt hat: Wie ist die Klasse Base definiert?
Also hier mal ein paar Dinge, die ich so anmerken könnte (sorry, war mal Tutor
![Stick out tongue :p :p](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f61b.png)
- Setze memory als private. Felder sollten immer private sein und über getter und setter geholt/gesetzt werden (Guter Programmierstil/Konvention). Du brauchst dann natürlich eine Methode "push(double zahl)" und eine Methode "peek()" in der Klasse Calculator, um ein push auf memory durchzuführen oder einen peek.
- Ich würde die klasse Addition als static Klasse behandeln. D. h. deren Methoden static machen. Die kannst du dann so verwenden: Addition.add().
- Natürlich funktioniert der vorherige Punkt nicht, da add() keine Parameter übergeben wurden. Also würde ich deine private-Felder (sum1,sum2,resultAdd) entfernen. Stattdessen würde ich add wie folgt ändern: add(Stack<Double> stack). resultAdd ergibt sich ja dann in der Methode.
- Was soll nun der stack als Parameter? Ganz einfach, du könntest den vorhandenen Stack aus der Klasse Calculator übergeben und in add() verwenden. So könnte die Methode innen aussehen:
Java:
public static Stack<Double> add(Stack<Double> stack)
{
double sum1 = stack.pop();
double sum2 = stack.pop();
//Jetzt das, was auch immer du mit dem Ergebnis machen möchtest
// Du kannst den Rückgabetyp von add hier auch gerne als double ändern und das Ergebnis zurückgeben mit: return sum1+sum2;
stack.push(sum1+sum2);
//Hier könntest du auch den Code beenden, müsstest nur den Rückgabetyp dieser Methode zu void ändern, die Änderungen müssten in stack gespeichert bleiben.
//Falls du aber den ganzen Stack zurückgeben willst oder falls die Änderungen doch nicht gespeichert werden (müssten sie aber eigentlich):
return stack;
}
- Als nächstes würde ich für die Main-Methode eine eigene Klasse "Main" oder "Test" etc. schreiben, da dies schöner ist, als dies unbequem in die Klasse Calculator zu schreiben (Jedenfalls wird es so in den Unis gelehrt):
Java:
public class Main
{
public static void main(String[] args)
{
Calculator calc = new Calculator();
System.out.prinlnt("Zahlen ins Memory");
calc.push(1);
calc.push(2);
System.out.println(calc.peek());
Addition.add(calc.getStack());
//Wenn hier der Stack unverändert bleibt dann einfach: calc.setStack(Addition.add(calc.getStack()));
System.out.println(calc.peek());
}
}