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



我在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字符串使用调试器时,它显示堆栈已正常填充,但使用命令行参数时,即使for循环完成,它也总是显示包含0个元素的堆栈。我做错了什么?

确保何时使用"=="以及何时使用"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.

当你使用equals(…)方法检查操作数时,你的问题就会得到解决

操作员

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

这里有两个问题。首先,Java中的String应该使用equals进行比较。在Java中使用==实际上是比较字符串的地址,而不是它们的内容。第二个问题是,当您调用类似java Expression 1*2+3的程序时,在这种情况下,argv[0]将是总的1*2+3。要解决此问题,您需要对字符串中的每个字符进行迭代。

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

相关内容

  • 没有找到相关文章

最新更新