Hallo. Es soll ein Taschenrechner für die Konsole programmiert werden, der mit mehr als 2 Zahlen rechnet. Ein bsp. für die Eingabe wäre: 6 + 3 * 8 - 2
Ich habe mir überlegt die Eingabe mittels eines Scanners in einer ArrayList zu speichern. Es soll überprüft werden wann ein Operator vorhanden ist. Dann sollen die Zahlen vor und nach dem Operator entsprechend gerechnet werden. Ich möchte danach die Zahlen aus meiner Liste entfernen, da ich sie ja nicht mehr brauche und stattdessen mein Zwischenergebnis wieder einfügen. Nur irgendwie klappt das so nicht ganz. Gebe ich z.B. 6 + 3 + 5 + 5 = ein, erhalte ich 9 + 19. irgendwie stimmt da was nicht. Davon mal abgesehen habe ich Punkt vor Strich nicht beachtet, auch hier weiß ich nicht weiter. Bitte flamed mich nicht, dass alles in der Main Methode steht. Ich möchte das ganze objektorientiert angehen, jedoch erst, wenn mein Taschenrechner an sich funktioniert. Ich lerne Java jetzt erst seit einem Monat, bitte berücksichtigt das.
Ich habe mir überlegt die Eingabe mittels eines Scanners in einer ArrayList zu speichern. Es soll überprüft werden wann ein Operator vorhanden ist. Dann sollen die Zahlen vor und nach dem Operator entsprechend gerechnet werden. Ich möchte danach die Zahlen aus meiner Liste entfernen, da ich sie ja nicht mehr brauche und stattdessen mein Zwischenergebnis wieder einfügen. Nur irgendwie klappt das so nicht ganz. Gebe ich z.B. 6 + 3 + 5 + 5 = ein, erhalte ich 9 + 19. irgendwie stimmt da was nicht. Davon mal abgesehen habe ich Punkt vor Strich nicht beachtet, auch hier weiß ich nicht weiter. Bitte flamed mich nicht, dass alles in der Main Methode steht. Ich möchte das ganze objektorientiert angehen, jedoch erst, wenn mein Taschenrechner an sich funktioniert. Ich lerne Java jetzt erst seit einem Monat, bitte berücksichtigt das.
Code:
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
double ergebnis = 0;
Scanner sc = new Scanner(System.in);
ArrayList<String> zahlen = new ArrayList<String>();
while (true) {
String eingabe = sc.next();
if (eingabe.equalsIgnoreCase("=")) {
break;
}
zahlen.add(eingabe);
}
for (int i = 0; i < zahlen.size(); i++) {
switch(zahlen.get(i)){
case "+":
double x = Double.parseDouble(zahlen.get(i-1));
double y = Double.parseDouble(zahlen.get(i+1));
ergebnis = ergebnis + x + y;
zahlen.remove(i+1);
zahlen.remove(i);
zahlen.remove(i-1);
// Methode in Utils
String stringErgebnis = String.valueOf(ergebnis);
zahlen.add(i-1, stringErgebnis);
break;
case "-":
x = Double.parseDouble(zahlen.get(i-1));
y = Double.parseDouble(zahlen.get(i+1));
ergebnis = ergebnis + x - y;
zahlen.remove(i+1);
zahlen.remove(i);
zahlen.remove(i-1);
// Methode in Utils
stringErgebnis = String.valueOf(ergebnis);
zahlen.add(i-1, stringErgebnis);
break;
case "*":
x = Double.parseDouble(zahlen.get(i-1));
y = Double.parseDouble(zahlen.get(i+1));
ergebnis = ergebnis + x * y;
zahlen.remove(i+1);
zahlen.remove(i);
zahlen.remove(i-1);
// Methode in Utils
stringErgebnis = String.valueOf(ergebnis);
zahlen.add(i-1, stringErgebnis);
case "/":
x = Double.parseDouble(zahlen.get(i-1));
y = Double.parseDouble(zahlen.get(i+1));
ergebnis = ergebnis + x / y;
zahlen.remove(i+1);
zahlen.remove(i);
zahlen.remove(i-1);
// Methode in Utils
stringErgebnis = String.valueOf(ergebnis);
zahlen.add(i-1, stringErgebnis);
}
}
System.out.println(zahlen);
}
}