Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';在Java中,t将值从命令行参数推送到堆栈中_Java_Math_Main_Evaluate_Infix Notation - Fatal编程技术网

Can';在Java中,t将值从命令行参数推送到堆栈中

Can';在Java中,t将值从命令行参数推送到堆栈中,java,math,main,evaluate,infix-notation,Java,Math,Main,Evaluate,Infix Notation,我在java中遇到了一个奇怪的问题。我正在尝试制作一个数学表达式计算器,它将计算中缀数学表达式并在屏幕上返回最终结果。我使用堆栈来完成任务,到目前为止,我使用硬编码字符串作为输入,但出于同样的目的,我将其更改为命令行参数。我的问题是,虽然数据类型和字符串完全相同,但我使用的堆栈不会将值从命令行输入推送到它们自己 下面是将数据推入堆栈的代码 public class Expression { public static void main(String argv[]){

我在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());
    }
}
公共类表达式
{
公共静态void main(字符串argv[]){
堆栈运算符=新堆栈();
堆栈操作数=新堆栈();
/*
字符串推送[]=新字符串[argv.length];

对于(int i=0;i理想情况下,由于使用了相等运算符,您没有将任何内容推入堆栈中。您可以将
argv[i]==“”
修改为
argv[i]。等于(“”
。这样应该可以工作。此外,在字符串比较期间,始终使用
equals()
方法,因为您永远不知道字符串是否已被插入。

理想情况下,您没有将任何内容推入堆栈,因为您使用了相等运算符。您可以将
argv[i]==“”
修改为
argv[i]。等于(“”
),然后它应该可以工作。此外,在字符串比较期间,始终使用
equals()
方法,因为您永远不知道字符串是否已插入。这里有两个问题。第一个问题是,Java中的
字符串
应该使用
equals
进行比较。Java中的
==
实际上比较字符串的地址,而不是它们的内容。第二个问题是,当您调用pro时gram-like
java表达式1*2+3
argv[0]
在这种情况下将是总数
1*2+3
。要解决此问题,您需要迭代字符串中的每个字符


编辑:在发布这篇文章之后,我意识到参数可能是以空格分隔的,就像在
1*2+3
中一样,这里有两个问题。第一个问题是Java中的
String
应该使用
equals
进行比较。Java中的
=
实际上是比较字符串的地址,而不是它们的内容。seco第二个问题是,当您调用java Expression 1*2+3这样的程序时,
argv[0]
在这种情况下将是总数
1*2+3
。要解决这个问题,您需要迭代字符串中的每个字符

编辑:发布这篇文章后,我意识到参数可能是以空格分隔的,如
1*2+3

请确保何时使用“==”以及何时使用“equals”

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

运算符

请确保何时使用“==”以及何时使用“等于”

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


运算符

argv[i]
是一个
字符串
,在比较时需要使用
equals
,只有在我声明一个类似字符串push[]={“4”、“+”、“2”}的字符串时,so==才会起作用;因为当我使用像这样的硬编码字符串数组时堆栈正在工作……另请参见
argv[i]
是一个
字符串
,您需要在比较时使用
equals
,只有在我声明字符串push[]={“4”、“+”、“2”}之类的字符串时,so==才会起作用;因为当我使用像这样的硬编码字符串数组时堆栈正在工作……另请参见
     "==" will be used to check the equality of the String objects 
    "equals(...)" will be used to the check the content of the String objects.