我需要一些關于后綴代碼前綴的幫助。當我通過 GUI 從運算式“* 2 2 - 12 9 2”生成動作時,它回傳 2*。它應該回傳“2 2 12 9 2 - *”。我不斷更改代碼,并不斷得到相同的結果。如有任何指導,我將不勝感激。
import java.util.*;
public class Postfix{
static String prePostfix(String p){
Stack<String> stack = new Stack<String>();
int l = p.length();
for(int i = l-1; i >= 0; i--){
if(isOperator(p.charAt(i))){
String stack1 = stack.peek();
stack.pop();
String stack2 = stack.peek();
stack.pop();
String temp = stack1 stack2 p.charAt(i);
stack.push(temp);
}
else{
stack.push(p.charAt(i) "");
}
}
return stack.peek();
}
static boolean isOperator(char x){
switch (x){
case ' ':
case '-':
case '/':
case '*':
case '^':
return true;
}
return false;
}
}
uj5u.com熱心網友回復:
您的問題是您沒有考慮運算式中的分隔符,即每個子運算式之間的空格。
我建議您不要使用分隔符處理原始字串,只需將您的字串拆分為引數并處理該陣列,然后使用您喜歡的分隔符加入它們。
無論如何,這是固定代碼:
import java.util.*;
public class Postfix{
static String prePostfix(String p){
Stack<String> stack = new Stack<String>();
String[] arrOfStr = p.split(" ");
int l = arrOfStr.length;
for(int i = l-1; i >= 0; i--){
if(isOperator(arrOfStr[i].charAt(0))){
String stack1 = stack.peek();
stack.pop();
String stack2 = stack.peek();
stack.pop();
String temp = stack1 " " stack2 " " arrOfStr[i];
stack.push(temp);
}
else{
stack.push(arrOfStr[i]);
}
}
return stack.peek();
}
static boolean isOperator(char x){
switch (x){
case ' ':
case '-':
case '/':
case '*':
case '^':
return true;
}
return false;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/419809.html
標籤:
下一篇:雞尾酒排序總是比冒泡排序更好嗎?
