![](/img/trans.png)
[英]How to convert a BigInteger to a scientific notation string and back?
[英]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.