首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Java中无法将值从命令行参数推送到堆栈

在Java中无法将值从命令行参数推送到堆栈
EN

Stack Overflow用户
提问于 2012-09-11 13:39:30
回答 3查看 409关注 0票数 0

我在java有个奇怪的问题。我正在尝试制作一个数学表达式计算器,它可以计算一个中缀的数学表达式,并在屏幕上返回最终结果。我已经使用堆栈完成了这项任务,到目前为止,我使用硬编码字符串作为输入,但出于同样的目的,我将其更改为命令行参数。我的问题是,虽然数据类型和字符串完全相同,但我使用的堆栈并不会将值从命令行输入推送到自身。

下面是将数据推送到堆栈的代码。

代码语言:javascript
复制
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元素的堆栈。我做错了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-11 14:00:38

确保什么时候使用"==“,什么时候使用"equals"...

代码语言:javascript
复制
     "==" will be used to check the equality of the String objects 

代码语言:javascript
复制
    "equals(...)" will be used to the check the content of the String objects.

当你使用等号(...)时,你的问题就解决了检查操作数的方法

运算符

票数 1
EN

Stack Overflow用户

发布于 2012-09-11 13:51:30

理想情况下,您没有将任何内容推入堆栈,因为您使用了相等运算符。将argv[i] == "<any_str>"修改为argv[i].equals("<any_str>")。那么它应该是有效的。此外,在字符串比较期间,请始终使用equals()方法,因为您永远不会知道字符串是否被实例化

票数 1
EN

Stack Overflow用户

发布于 2012-09-11 13:54:43

这里有两个问题。首先,Java中的String应该使用equals进行比较。在Java语言中使用==实际上是比较字符串的地址,而不是它们的内容。第二个问题是,当你调用像java Expression 1*2+3这样的程序时,本例中的argv[0]将是总的1*2+3。要解决这个问题,您需要遍历字符串中的每个字符。

编辑:在发布了这篇文章后,我意识到参数可能是以空格分隔的,就像在1 * 2 + 3中一样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12363357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档