前缀到后缀 Java
Prefix To Postfix Java
我的前缀到后缀代码需要一些帮助。每当我通过 GUI 从表达式“* 2 + 2 - + 12 9 2”生成操作时,它 returns 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;
}
}
你的问题是你没有考虑表达式中的分隔符,它们是每个子表达式之间的空格。
我建议您不要处理带有分隔符的原始字符串,
只需将您的字符串拆分为参数并处理该数组,然后使用您喜欢的分隔符加入它们。
无论如何,这里是固定代码:
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;
}
}
我的前缀到后缀代码需要一些帮助。每当我通过 GUI 从表达式“* 2 + 2 - + 12 9 2”生成操作时,它 returns 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;
}
}
你的问题是你没有考虑表达式中的分隔符,它们是每个子表达式之间的空格。
我建议您不要处理带有分隔符的原始字符串, 只需将您的字符串拆分为参数并处理该数组,然后使用您喜欢的分隔符加入它们。
无论如何,这里是固定代码:
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;
}
}