Ich möchte ein Programm schreiben, um die Ausgabe bei arithmetischem Ausdruck zu berechnen. Wie folgt aus:Polnische Notation Implementierung
Meine Eingabe ist: * + * + 1 2 + 3 4 5 6 Mein ausgegeben werden soll: 156
ich ein Java-Programm geschrieben, dies mit Stack-Datentyp zu tun. Hier ist mein Java-Programm:
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String args[]){
Stack stack =new Stack();
String input;
String trimmedInput[];
int output;
int number1,number2;
int countOfNumber,j;
Scanner scanner = new Scanner(System.in);
System.out.println("put your arithmetical expression. Using Space between ");
input=scanner.nextLine();
trimmedInput=input.split("\\s+");
// for(String a:trimmedInput)
// System.out.println(a);
countOfNumber=trimmedInput.length;
for(j=0;j<countOfNumber;j++) {
if (isNumeric(trimmedInput[j])) {
stack.push(trimmedInput[j]);
}
if (trimmedInput[j].equals("+")) {
number1 = Integer.parseInt((String) stack.pop()) ;
number2 = Integer.parseInt((String) stack.pop()) ;
output = number1 + number2;
stack.push(output);
}
if(trimmedInput[j].equals("-")){
number1 = Integer.parseInt((String) stack.pop()) ;
number2 = Integer.parseInt((String) stack.pop()) ;
output = number1-number2;
stack.push(output);
}
if(trimmedInput[j].equals("*")){
number1 = Integer.parseInt((String) stack.pop()) ;
number2 = Integer.parseInt((String) stack.pop()) ;
output = number1*number2;
stack.push(output);
}
if(trimmedInput[j].equals("/")){
number1 = Integer.parseInt((String) stack.pop()) ;
number2 = Integer.parseInt((String) stack.pop()) ;
output = number1/number2;
stack.push(output);
}
}
while(!stack.isEmpty())
System.out.println(stack.pop());
}
public static boolean isNumeric(String str)
{
try
{
double d = Double.parseDouble(str);
}
catch(NumberFormatException nfe)
{
return false;
}
return true;
}
}
Ok. Hier ist mein Problem. Wenn ich * + * + 1 2 + 3 4 5 6
, so etwas berechnen wollen, gibt mein Compiler einen Fehler wie folgt aus:
Exception in thread "main" java.util.EmptyStackException
at java.util.Stack.peek(Stack.java:102)
at java.util.Stack.pop(Stack.java:84)
at Main.main(Main.java:41)
Hier ist meine 41. Zeile an Code:
number1 = Integer.parseInt((String) stack.pop()) ;
ich nicht dachte, können Sie heraus, was in Problem ist mein Code. Ich bin neu bei Java. Bitte hilf mir. Vielen Dank :)
Dies bedeutet, dass Sie Elemente versuchen, auch aus Stapel zu nehmen, obwohl es ist leer! –
Sie sollten von rechts nach links fahren. Werfen Sie einen Blick auf dieses Beispiel der Präfix-Auswertung: http://www.manojagarwal.co.in/evaluation-of-prefix-expression/ – rafid059
Ja mein Freund. Ich weiß es aber ich kann nicht verstehen, dass mein Code diesen Fehler gibt. Ich schiebe meinen Stack in meinen Code. – cilgin282