我在java中有一个奇怪的问题。我正在尝试制作一个数学表达式计算器,它将评估中缀数学表达式并在屏幕上返回最终结果。我已经使用堆栈来完成任务,到目前为止,我使用硬编码字符串进行输入,但后来我将其更改为命令行参数以实现相同目的。我的问题是,我正在使用的堆栈不会从命令行输入将值推入自身,尽管数据类型和字符串完全相同。
以下是将数据推入堆栈的代码。
public class Expression
{
public static void main(String argv[]){
Stack<String> operator = new Stack<String>();
Stack<String> operand = new Stack<String>();
/*
String push[] = new String[argv.length];
for (int i = 0; i<push.length; i++){
push[i] = argv[i];
}
*/
for(int i = 0; i<argv.length; i++){
if(argv[i] == "+" || argv[i] == "-" || argv[i] == "*"
|| argv[i] == "/" || argv[i] == "^") {
operator.push(argv[i]);
} else if(argv[i] == "0" || argv[i] == "1" || argv[i] == "2"
|| argv[i] == "3" || argv[i] == "4" || argv[i] == "5"
|| argv[i] == "6" || argv[i] == "7" || argv[i] == "8"
|| argv[i] == "9") {
operand.push(argv[i]);
}
}
System.out.println(operand);
System.out.println(operator);
Stack<String> result = evaluateStack(operand, operator);
System.out.println(result.toString());
}
}
当我使用带有编码字符串的调试器时,它显示堆栈已正常填充,但是使用命令行参数,即使for循环完成,它也始终显示具有0个元素的堆栈。我究竟做错了什么?
答案 0 :(得分:1)
理想情况下,由于您使用了相等运算符,因此未将任何内容推送到堆栈中。您将argv[i] == "<any_str>"
修改为argv[i].equals("<any_str>")
。然后它应该工作。在字符串比较期间,始终使用equals()
方法,因为您永远不会知道字符串是否被实习
答案 1 :(得分:1)
这里有两个问题。首先,应使用String
比较Java中的equals
。在Java中使用==
实际上比较了字符串的地址,而不是它们的内容。第二个问题是,当你打电话给java Expression 1*2+3
这样的程序时,argv[0]
在这种情况下将是总1*2+3
。要解决此问题,您需要遍历String中的每个字符。
编辑:发布后我意识到参数可能是空格分隔的,就像在1 * 2 + 3
中一样。
答案 2 :(得分:1)
确保何时使用“==”以及何时使用“等于”....
"==" will be used to check the equality of the String objects
和
"equals(...)" will be used to the check the content of the String objects.
当您使用equals(...)方法检查操作数时,您的问题将得到解决
运营商