我试图输入一个中缀表达式,并使用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...
由于某种原因,字符串没有被打印-我不明白我要去哪里。有人可以指出我做错了吗?
非常感谢您!
答案 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, "");
始终逐行阅读代码,并考虑每行的实际操作,它将解决很多愚蠢的错误!