我已经编写了一个将中缀表达式转换为后缀表达式的程序。不过,我需要多输入和停止时,我发现一个0一次在java中的多个输入
我所是,
输入:(3 + 4)*(3-1)
输出:4 + 3 1 - *
我需要的是,
输入:
(3 + 4)*(3-1)
(3 * 4) - (3 * 1)
(3 + 4)*(3-1)
(3 + 2)*((3-3)
(3+ 4)*(3-1)
输出:
4 + 3 1 - *
4 * 3 1 * -
4 + 3 1 - *
语法错误
4 + 3 1 - *
末
的代码是:
public static void main(String args[])throws IOException
{
BufferedReader input = new BufferedReader (new InputStreamReader(System.in));
String s = input.readLine();
String pf = new String();
int i=0, check=0;
Stack<Character> s1 = new Stack<>();
while(i<s.length())
{
if(isOperand(s.charAt(i)))
{
pf += s.charAt(i);
}
else if(isOperator(s.charAt(i)))
{
while (!s1.empty() && s1.peek() != '(' && compareOperators(s1.peek(),s.charAt(i)) <= 0)
{
pf += ' ';
pf += s1.peek();
s1.pop();
}
pf += ' ';
s1.push(s.charAt(i));
}
else if (s.charAt(i) == '(')
{
s1.push(s.charAt(i));
}
else if (s.charAt(i) == ')')
{
check++;
while (!s1.empty())
{
if ((char)s1.peek() == '(')
{
check--;
s1.pop();
break;
}
pf += ' ';
pf += s1.peek();
s1.pop();
}
}
i++;
}
while (!s1.empty()) {
if(s1.peek()=='(')
check--;
pf += ' ';
pf += s1.peek();
pf += ' ';
s1.pop();
}
if(check!=0)
System.out.println("Syntax Error");
else
{
System.out.println(pf);
}
}
谁能帮助我?
我想你应该从转换逻辑分离第一输入逻辑。将算法提取到一个方法中,该方法将表达式字符串作为参数并将转换后的表达式作为字符串返回。那么你可能会看到自己的解决方案! – isnot2bad
你需要多次调用'input.readLine()'。 –
我不同意你的期望;你应该期望'(3 + 4)*(3-1)'产生'34 + 31- *'。你错过了那个额外的'3'。 – Makoto