Hallo,
mein Gruppenpartner und ich finden keine Lösung. Wir sind
ziemliche Anfänger im Gebiet Java und müssen für ein Projekt
im Studium einen RPN-Taschenrechner programmieren, ohne GUI.
Nun sind wir soweit, dass der Taschenrechner halbwegs funktioniert,
jedoch gibt es ein Problem:
Wir haben das Programm so geschrieben, dass der Stack mit .size()==1
angezeigt wird, da das Ergebnis eine Stackgröße von 1 haben soll.
Wenn man zum Beispiel 3 2 + eingibt funktioniert alles reibungslos,
jedoch wird es bei 3 3 * 4 4 * + Wurzel etwas schwerer, da das Programm
mehr als ein Ergebnis ausgibt.
Wir danken schonmal für jede Hilfe.
Hier der Code:
mein Gruppenpartner und ich finden keine Lösung. Wir sind
ziemliche Anfänger im Gebiet Java und müssen für ein Projekt
im Studium einen RPN-Taschenrechner programmieren, ohne GUI.
Nun sind wir soweit, dass der Taschenrechner halbwegs funktioniert,
jedoch gibt es ein Problem:
Wir haben das Programm so geschrieben, dass der Stack mit .size()==1
angezeigt wird, da das Ergebnis eine Stackgröße von 1 haben soll.
Wenn man zum Beispiel 3 2 + eingibt funktioniert alles reibungslos,
jedoch wird es bei 3 3 * 4 4 * + Wurzel etwas schwerer, da das Programm
mehr als ein Ergebnis ausgibt.
Wir danken schonmal für jede Hilfe.
Hier der Code:
Java:
import java.util.Scanner;
import java.util.Stack;
import java.lang.Math;
public class UPNRechner {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); //Benutzereingabe
boolean verlassen = false; //boolean zum Verlassen der while-Schleife bei true
Stack<Double> ergebnis = new Stack(); //Stack erstellt
int laengeVomStack = ergebnis.size();
int i = 0;
willkommen();
eingabe();
while (verlassen != true) {
i++;
String nutzereingabe;
String antwortJN = "";
nutzereingabe = scan.next();
double zahl;
try{
zahl = Double.parseDouble(nutzereingabe);
}catch(NumberFormatException e){
if(nutzereingabe.equals("+") ||
nutzereingabe.equals("-") ||
nutzereingabe.equals("*") ||
nutzereingabe.equals("x") ||
nutzereingabe.equals("/") ||
nutzereingabe.equals("pow") ||
nutzereingabe.equals("cos") ||
nutzereingabe.equals("sqrt")||
nutzereingabe.equals("sin") ||
nutzereingabe.equals("cos") ||
nutzereingabe.equals("ln") ||
nutzereingabe.equals("~") ||
nutzereingabe.equals("tan") ||
nutzereingabe.equals("euler") ||
nutzereingabe.equals("exit")){
}
else {
System.out.println("Ungültige Eingabe! Bitte erneut versuchen:");
eingabe();
nutzereingabe = scan.next();
}
}
// Rechenoperatoren
if(nutzereingabe.equals("+")){
Double ergebnisTmp = ergebnis.pop();
ergebnis.push(ergebnis.pop() + ergebnisTmp);
}else if (nutzereingabe.equals("-")){
Double ergebnisTmp = ergebnis.pop();
ergebnis.push(ergebnis.pop() - ergebnisTmp);
}else if (nutzereingabe.equals("x") || nutzereingabe.equals("*")){
Double ergebnisTmp = ergebnis.pop();
ergebnis.push(ergebnis.pop() * ergebnisTmp);
}else if (nutzereingabe.equals("/")){
Double ergebnisTmp = ergebnis.pop();
ergebnis.push(ergebnis.pop() / ergebnisTmp);
}else if (nutzereingabe.equals("sqrt")){
Double ergebnisTmp = ergebnis.pop();
ergebnis.push(Math.sqrt(ergebnisTmp));
}else if (nutzereingabe.equals("sin")){
Double ergebnisTmp = ergebnis.pop();
ergebnis.push(Math.sin(ergebnisTmp));
}else if (nutzereingabe.equals("cos")){
Double ergebnisTmp = ergebnis.pop();
ergebnis.push(Math.cos(ergebnisTmp));
ergebnis.push(Math.sin(ergebnisTmp));
}else if (nutzereingabe.equals("~")){
Double ergebnisTmp = ergebnis.pop();
ergebnis.push((ergebnisTmp * (-1)));
}else if (nutzereingabe.equals("tan")){
Double ergebnisTmp = ergebnis.pop();
ergebnis.push(Math.tan(ergebnisTmp));
}else if (nutzereingabe.equals("ln")){
Double ergebnisTmp = ergebnis.pop();
ergebnis.push(Math.log(ergebnisTmp));
}else if (nutzereingabe.equals("exp")){
Double ergebnisTmp = ergebnis.pop();
ergebnis.push(Math.pow(2.71828182846, 1));
}else if (nutzereingabe.equals("pow")){
Double ergebnisTmp = ergebnis.pop();
System.out.println("Geben Sie einen Exponenten ein:");
ergebnis.push(Math.pow(ergebnisTmp, scan.nextDouble()));
}else if (nutzereingabe.equalsIgnoreCase("exit")){
verlassen = true;
if(verlassen == true) System.exit(0);
} else ergebnis.push
(Double.parseDouble(nutzereingabe));
if (i >=2 && ergebnis.size() == 1) {
double finErgebnis = ergebnis.peek();
System.out.println(" Ergebnis: " + finErgebnis);
}
}
}
public static void eingabe(){
System.out.println(" ***Eingabe***");
System.out.print(" ");
}
public static void willkommen() {
System.out.println(" ");
System.out.println("*****************");
System.out.println("Willkommen im " +
"RPN-\n Taschenrechner!");
}
}