我在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());
}
}当我使用harcoded string的调试器时,它显示堆栈已正常填充,但使用命令行参数时,即使在for循环完成时,它也始终显示具有0元素的堆栈。我做错了什么?
发布于 2012-09-11 14:00:38
确保什么时候使用"==“,什么时候使用"equals"...
"==" will be used to check the equality of the String objects 和
"equals(...)" will be used to the check the content of the String objects.当你使用等号(...)时,你的问题就解决了检查操作数的方法
运算符
发布于 2012-09-11 13:51:30
理想情况下,您没有将任何内容推入堆栈,因为您使用了相等运算符。将argv[i] == "<any_str>"修改为argv[i].equals("<any_str>")。那么它应该是有效的。此外,在字符串比较期间,请始终使用equals()方法,因为您永远不会知道字符串是否被实例化
发布于 2012-09-11 13:54:43
这里有两个问题。首先,Java中的String应该使用equals进行比较。在Java语言中使用==实际上是比较字符串的地址,而不是它们的内容。第二个问题是,当你调用像java Expression 1*2+3这样的程序时,本例中的argv[0]将是总的1*2+3。要解决这个问题,您需要遍历字符串中的每个字符。
编辑:在发布了这篇文章后,我意识到参数可能是以空格分隔的,就像在1 * 2 + 3中一样。
https://stackoverflow.com/questions/12363357
复制相似问题