Java:后缀到后缀的转换

时间:2019-03-05 02:03:05

标签: java stack

我试图输入一个中缀表达式,并使用Stack类将其转换为后缀表达式。我将以字符串形式输出后缀表达式。

到目前为止,这是我的代码:

import java.util.*;
public class Fix 
{
    public static void main(String[]args)
    {
        Scanner s= new Scanner (System.in);

        System.out.println("Enter expression in infix: ");
        String input= s.nextLine();

        Stack<String> operator= new Stack<String>();
        Stack<String> operand= new Stack<String>();
        System.out.println("Created stacks...");
        String expression="";
        transferToString(input, operator, operand, expression);
        System.out.println("Created string... ");
        System.out.println(expression);

    }
}

以下是在void transferToString方法中创建字符串 expression 的语句:

else if (operand.empty()==false)
            {
                String str1 = input.substring(i++,i+2);
                expression.concat(operand.pop());
                expression.concat(str1);
            }

上面的代码是一个嵌套的if语句,主要条件是下一个字符是否为操作数。

在上面的else-if语句中,我从堆栈 operand 中弹出一个操作数,并将其连接到字符串 expression 。在主要方法中,我打印出表达式。

但是,这是我的输出:

Enter expression in infix: 
(1+5)
Created stacks...
Pushed first operator!
Created string... 

由于某种原因,字符串没有被打印-我不明白我要去哪里。有人可以指出我做错了吗?

非常感谢您!

2 个答案:

答案 0 :(得分:0)

您的transferToString方法不返回任何内容。返回expression变量。

Stack<String> operator= new Stack<String>();
Stack<String> operand= new Stack<String>();
String expression="";

还请注意,main方法不需要上述声明,您可以将其放在transferToString方法中。因此,您的transferToString方法将只接受参数input

这将是您的main方法和transferToString方法的新外观。

main方法:

public static void main(String[]args)
    {
        Scanner s= new Scanner (System.in);

        System.out.println("Enter expression in infix: ");
        String input= s.nextLine();
        System.out.println("Created stacks...");
        String expression = transferToString(input);
        System.out.println("Created string... ");
        System.out.println(expression);

    }

transferToString方法:

public static String transferToString(String input){
    Stack<String> operator= new Stack<String>();
    Stack<String> operand= new Stack<String>();
    String expression="";

    // Copy the code of your old transferToString method here

    return expression;
}

答案 1 :(得分:0)

问题在于,在expression中具有范围的main()从未设置为在expression中设置的transferToString

只需将main中定义的expression设置为transferToString,并让transferToString返回新创建的expression

就像这样:String expression = transferToString(input, operator, operand, "");

始终逐行阅读代码,并考虑每行的实际操作,它将解决很多愚蠢的错误!