Java 如何将中缀转换为前缀?
我写这段代码是为了把中缀转换成前缀,但是我没有得到任何输出。我能做什么 当最后一次运行时,它进入无限循环,如果条件不处理,问题是什么Java 如何将中缀转换为前缀?,java,stack,prefix,infix-notation,Java,Stack,Prefix,Infix Notation,我写这段代码是为了把中缀转换成前缀,但是我没有得到任何输出。我能做什么 当最后一次运行时,它进入无限循环,如果条件不处理,问题是什么 static String infixToPrefix(String infix){ for (int j = 0; j < infix.length(); j++){ if (infix.charAt(j) == 's' && infix.charAt(j + 1) == 'i' &&
static String infixToPrefix(String infix){
for (int j = 0; j < infix.length(); j++){
if (infix.charAt(j) == 's' && infix.charAt(j + 1) == 'i' && infix.charAt(j + 2) == 'n'){
infix = infix.replace("sin","S");
break;
}
else if (infix.charAt(j) == 'c' && infix.charAt(j + 1) == 'o' && infix.charAt(j + 2) == 's' ){
infix = infix.replace("cos", "C");
break;
}
else if (infix.charAt(j) == 't' && infix.charAt(j + 1) == 'a' && infix.charAt(j + 2) == 'n' ) {
infix = infix.replace("tan", "T");
break;
}
else if (infix.charAt(j) == 'l' && infix.charAt(j + 1) == 'o' && infix.charAt(j + 2) == 'g' ) {
infix = infix.replace("log", "L");
break;
}
}
Stack<String> operators = new Stack<>();
Stack<String> operands = new Stack<>();
String[] exp = infix.split("");
for (int i = 0; i < exp.length; i++) {
if (exp[i].equals("(")) {
operators.push(exp[i]);
}
else if (exp[i].equals(")")) {
while (!operators.isEmpty() && !operators.getTop().equals("(")) {
if (isMultiOperator(operators.getTop())){
String op1 = operands.getTop();
operands.pop();
String op2 = operands.getTop();
operands.pop();
String op3 = operators.getTop();
operators.pop();
String temp = op3 + op2 + op1;
operands.push(temp);
}
else if(isUnaryOperator(operators.getTop())){
String op1 = operands.getTop();
operands.pop();
String op2 = operators.getTop();
operators.pop();
String temp = op2 + op1;
operands.push(temp);
}
}
operators.pop();
}
else if (isMultiOperator(exp[i]) || isUnaryOperator(exp[i])){
while (!(operators.isEmpty()) && precedence(exp[i]) <= precedence(operators.getTop())) {
if (isMultiOperator(operators.getTop())){
String op1 = operands.getTop();
operands.pop();
String op2 = operands.getTop();
operands.pop();
String op3 = operators.getTop();
operators.pop();
String temp = op3 + op2 + op1;
operands.push(temp);
}
else if (isUnaryOperator(operators.getTop())){
String op1 = operands.getTop();
operands.pop();
String op2 = operators.getTop();
operators.pop();
String temp = op2 + op1;
}
}
operators.push(exp[i] + " ");
}
else if (Character.isLetterOrDigit(infix.charAt(i))){
boolean haveDot = exp[i].equals(".");
String temp = haveDot ? "0." : exp[i];
while ((i + 1) < exp.length && (Character.isLetterOrDigit(infix.charAt(i + 1)) || exp[i + 1].equals("."))) {
temp += exp[i + 1];
i++;
}
operands.push(temp + " ");
}
}
while (!operators.isEmpty()){
if (isMultiOperator(operators.getTop())){
String op1 = operands.getTop();
operands.pop();
String op2 = operands.getTop();
operands.pop();
String op3 = operators.getTop();
operators.pop();
String temp = op3 + op2 + op1;
operands.push(temp);
}
else if (isUnaryOperator(operators.getTop())){
String op1 = operands.getTop();
operands.pop();
String op2 = operators.getTop();
operators.pop();
String temp = op2 + op1;
operands.push(temp);
}
}
return operands.getTop() ;
}
静态字符串中缀前缀(字符串中缀){
对于(int j=0;j 而(!(operators.isEmpty())&&priority(exp[i])则通过单步执行调试器中的程序开始。这将让您看到哪里出了问题。如果您不知道如何使用调试器,现在正是学习的最佳时机。我做得很好,但我仍然不知道哪里出了问题。您能帮助了解吗?!