2015-04-16 53 views
0
while (strToken.hasMoreTokens()) 
{ 
    String i = strToken.nextToken();    
    char ch = ' '; 
    ch = i.charAt(0); 
    int operand; 
    int operator; 

    if(Character.isDigit(ch)) 
    { 
     operand = Integer.parseInt(i); 
     operandStack.push(operand); 
    } 
    else 
    { 
     operator = i.charAt(0); 
     operatorStack.push(operator); 
    } 
} 

while(operandStack.size() > 1) 
{ 
    operandStack.push(operate(operandStack.pop(), 
    operandStack.pop(), operatorStack.pop())); 
} 

resultTextField.setText(Integer.toString(operandStack.peek())); 

我的代碼不評估前綴符號操作數。我應該如何修改它以評估前綴表示法中的操作數。前綴符號 - Java的

+0

「代碼不計算」是沒有問題的描述。會發生什麼呢?用什麼輸入?和什麼輸出?預期和實際?當你[已經有工作代碼](http://stackoverflow.com/q/29594598/207421),你怎麼發佈這個? – EJP

+0

@EJP輸入:* + 16 + 4 3 1:預期輸出:80,實際輸出:128 – Jeremy

+0

請使用此信息更新你的問題,讓人們不必閱讀所有的意見,獲得大畫面。 –

回答

0

你使你的籌碼,然後開始計算,而不是在掃描過程中遇到操作時,你應該彈出操作數,計算出結果(通過應用遇到運營商的操作數),結果壓入堆棧。從右向左掃描。如果您從左向右掃描,則算法不同。您可以在波蘭語法的wikipedia頁面上閱讀這兩種實現。

你現在正在做什麼:

input: * + 16 4 + 3 1 
operand stack: 16 4 3 1 
operator stack: * + + 
pop + pop 3 pop 1 push 4 
operand stack: 16 4 4 
operator stack: * + 
pop + pop 4 pop 4 push 8 
operand stack: 16 8 
operator stack: * 
pop * pop 8 pop 16 
result = 16 * 128 

你需要做的(從右到左)什麼:

input: * + 16 4 + 3 1 
push 1 push 3 
operand stack: 1 3 
operator: + (you don't need operator stack) 
pop 1 pop 3 push 3+1 = 4 
operand stack: 4 
push 4 push 16 
operand stack: 4 4 16 
operator + 
pop 16 pop 4 push 4+16 = 20 
operand stack: 4 20 
operator * 
pop 20 pop 4 result 4*20 = 80