gpt4 book ai didi

java - 将中缀表达式转换为后缀表达式 - 无效空格插入

转载 作者:行者123 更新时间:2023-12-02 07:48:17 27 4
gpt4 key购买 nike

我正在制作一个转换器,它将采用中缀表达式并将它们转换为后缀表达式。

Example:
Infix: 2 * 3 - 10 / 4
Postfix: 2 3 * 10 4 / -

我有一个完全编码的方法,但它返回的后缀表达式是

2     3   *   1 0     4 / -

这样做有两个问题: 1. 主要问题是 1 和 0 之间有一个空格,而它们本来应该在一起 (10)。 2. 有很多额外的空格,输出应该类似于上面提供的示例。

我已经研究了从中缀到后缀的转换,但我无法确定如何进行比单位数字表达式转换更多的操作。

下面附加了我的 postfixtoinfix 类,表达式变量以完美的间距保存上面示例中指示的中缀。

import java.util.*;

public class InfixToPostfix
{
//Declare Instance Variables
private String expression;
private Stack<Character> stack = new Stack<Character>();

//Constructor
public InfixToPostfix(String infixExpression)
{
expression = infixExpression;
}//End of constructor

//Translate's the expression to postfix
public String translate()
{
//Declare Method Variables
String input = "";
String output = "";
char character = ' ';
char nextCharacter = ' ';

for(int x = 0; x < expression.length(); x++)
{
character = expression.charAt(x);

if(isOperator(character))
{
while(!stack.empty() && precedence(stack.peek())>= precedence(character))
output += stack.pop() + " ";
stack.push(character);
}
else if(character == '(')
{
stack.push(character);
}
else if(character == ')')
{
while(!stack.peek().equals('('))
output += stack.pop() + " ";
stack.pop();
}
else
{
if(Character.isDigit(character) && (x + 1) < expression.length() && Character.isDigit(expression.charAt(x+1)))
{
output += character;
}
else if(Character.isDigit(character))
{
output += character + " ";
}
else
{
output += character;
}
}
}//End of for

while(!stack.empty())
{
output += stack.pop() + " ";
}

return output;
}//End of translate method

//Check priority on characters
public static int precedence(char operator)
{
if(operator == '+' || operator =='-')
return 1;
else if(operator == '*' || operator == '/')
return 2;
else
return 0;
}//End of priority method

public boolean isOperator(char element)
{
if(element == '*' || element == '-' || element == '/' || element == '+')
return true;
else
return false;
}//End of isOperator method

}//End of class

最佳答案

您的代码并未将“10”视为单个实体,而是将其视为两个单独的字符“1”和“0”。对于任何不是运算符或括号的内容,您可以执行 output += character + ""; 这将为您提供 1 0 而不是所需的 10 .

关于java - 将中缀表达式转换为后缀表达式 - 无效空格插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10558343/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com