算術式を指定して出力を計算するプログラムを作成します。そのような:ポーランド語表記の実装
私の入力は次のとおりです。* + * + 1 2 + 3 4 5 6 私の出力は次のようになります。
156私はこの使用してスタックデータ型を実行するJavaプログラムを書きました。 私のJavaプログラムは次のとおりです。
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;
}
}
ここに私の問題があります。私はそのような* + * + 1 2 + 3 4 5 6
何かを計算したい場合は、私のコンパイラは、そのようなエラーを与える:私は問題が私の中にあるものを考え出したことはできません
number1 = Integer.parseInt((String) stack.pop()) ;
:ここ
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)
は私の41行のコードでありますコード。私はJavaで新しいです。私を助けてください。どうもありがとう:)
これは、スタックから要素を取り除こうとしていることを意味します。それは空です! –
右から左へ移動する必要があります。接頭辞評価のこの例を見てください:http://www.manojagarwal.co.in/evaluation-of-prefix-expression/ – rafid059
はい私の友人。私はそれを知っているが、私のコードがこのエラーを与えることは理解できない。私は私のコードで私のスタックをプッシュしています。 – cilgin282