簡體   English   中英

如何處理后綴符號中的背靠背字符

[英]how to handle back to back characters in postfix notation

如何在使用堆棧和后綴表示法時背靠背考慮兩個字符? 我已將我的后綴方程式轉換為字符串,然后嘗試計算它是字符還是數字,然后將數字放入堆棧中。 我的第一個方程運行良好,但由於第二個方程背靠背出現了兩個字符,因此該方程無法運行。 當我遇到第二個時,由於沒有將最后一個推入堆棧后要讀取的數字,因此沒有兩個數字可以使用后綴表示法。 任何幫助表示贊賞。

import java.util.Stack;
import java.util.EmptyStackException;
import java.util.Queue;

public class postFixCalc extends Program2Test{
    static Program2Test<Integer> calcStack = new Program2Test<>();

    private static int calc1(String exp) {
        Stack<Integer> calc1Stack = new Stack<>();

        try {
        for(int i = 0; i<exp.length(); i++) {
            char c = exp.charAt(i);
            if(Character.isDigit(c))
                calc1Stack.push(c-'0');
            else {
                int val1 = 0;
                int val2= 0;
                if(!calc1Stack.isEmpty()) {
                val1= calc1Stack.pop();
                val2= calc1Stack.pop();}

                switch(c){
                    case '+':
                        calc1Stack.push(val2+val1);
                        break;

                    case '-':
                        calc1Stack.push(val2-val1);
                        break;

                    case '/':
                        calc1Stack.push(val2/val1);
                        break;

                    case '*':
                        calc1Stack.push(val2*val1);
                        break;
                }
            }
        }
        }
        catch(EmptyStackException e) {
            System.out.println("Your stack is empty");      }
        return calc1Stack.pop();
    }
    public static void main(String[] args) {

        // TODO Auto-generated method stub
        String exp = "12+4*5-";     
        System.out.println("Your Answer is: " + calc1(exp));
        System.out.println("");
        String exp2 = "12*4*1-/53+";
        System.out.println("Your answer is: " + calc1(exp2));



    }

}

根據我對后綴表示法的理解,您的表達式exp2實際上是無效的。 您可以通過從左到右評估操作來評估后綴表達式。 因此,要手動計算表達式12*4*1-/53+ ,請執行以下操作:

從左側開始,我們掃描表達式,直到找到第一個運算符*。 然后,我們使用*運算符評估兩個緊鄰的前一個操作數1和2,並將這3個輸入值替換為輸出,得出24 * 1- / 53 +。 現在重復該過程。

我們從左側掃描並找到運算符*。 我們對前兩個操作數2和4進行評估,然后再次將輸入替換為輸出,得出81- / 53。 重復。

這次,我們去找操作員-。 我們在前兩個操作數8和1上對其求值,並用輸出替換輸入,產生。 53分之7+。 重復。

我們掃描找到一個/運算符。 可是等等! 運算符的左側只有一個操作數。 不允許這樣做,表示您的輸入無效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM