2016-09-20 67 views
1

我正在使用堆棧在java中創建後綴計算器。我已經寫了主要部分,但是我遇到了一些問題。對於初學者來說,我必須考慮空白,並且我不確定如何用我目前的設置來做到這一點。我不確定這是否會完全解決該計劃,但這將是一個開始。任何幫助將不勝感激。Java後綴計算器錯誤

import java.util.Scanner; 
import java.util.Stack; 
public class Postfix 
{ 
public static void main(String[]args) 
{ 
    Scanner sc = new Scanner(System.in); 
    System.out.println("Enter a Postfix expression"); 
    String input = sc.nextLine(); 
    Stack<Integer> Pstack = new Stack<Integer>(); 
    int result = 0; 
    for(int i=0; i<input.length();i++) 
    { 
     char ch = input.charAt(i); 

     if(ch>='0' && ch<='9') 
     { 
      Pstack.push((int)(ch-'0')); 
     } 
     else 
     { 
      int o1 = Pstack.pop(); 
      int o2 = Pstack.pop(); 

      switch(ch) 
      { 
      case '+':result=o1+o2; 
      break; 
      case '-':result=o1-o2; 
      break; 
      case '/':result=o1/o2; 
      break; 
      case '*':result=o1*o2; 
      } 
     } 
     Pstack.push(result); 
    } 
    result = Pstack.pop(); 
    System.out.println("result: "+ result); 
    } 
} 
+0

穿戴:'如果(CH =='「)繼續;'後直接'炭CH = input.charAt(ⅰ);' 。 –

回答

2

正如評論所說,把

if(ch == ' ') continue; 

char ch = input.charAt(i); 

這將直接解決該問題與空白。

另一個問題是,

Pstack.push(result); 

執行時間,不只是在情況下,運營商進行了評估。

所以這個聲明應該是「else」情況下的最後一個。

您還必須更正從堆棧彈出參數的方式。

例如如果你有後綴表達式12-(它應該計算爲-1),則 2位於堆棧之上,1之後。 在當前的解決方案中,結果將爲2 -1,因爲參數以錯誤的順序檢索。

所以

int o1 = Pstack.pop(); 
int o2 = Pstack.pop(); 

應更正

int o2 = Pstack.pop(); 
int o1 = Pstack.pop(); 
+0

謝謝!這解決了它。也幫助我更好地理解它。很好的答案! –

+0

再次看我的程序後,我還有一個問題。我剛剛意識到,我的計算器只適用於10以下的數字。例如,1 2 +工作並等於3.但是,1 11 +不等於2。有沒有辦法解決這個問題? –

+0

在這種情況下,必須通過添加分隔參數/運算符的分隔符來更改後綴字符串的格式。否則111-可以被解釋爲11 1 - 或1 11 - 。然後可以在輸入參數上使用另一個掃描器,並用它檢索參數/操作符。 – Gernot