Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.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
在Postfix(RPN)Java中计算数学表达式。没有堆栈,只有字符串_Java_Regex_Infix Notation_Calc_Rpn - Fatal编程技术网

在Postfix(RPN)Java中计算数学表达式。没有堆栈,只有字符串

在Postfix(RPN)Java中计算数学表达式。没有堆栈,只有字符串,java,regex,infix-notation,calc,rpn,Java,Regex,Infix Notation,Calc,Rpn,我试图通过一个子程序来理解以下指令: i=1 而i则表示您试图访问字符数组之外的字符,即字符数组的长度为10,您试图获取第11个字符 解决问题的更好方法是首先使用String.split或StringTokenizer标记表达式,然后循环遍历每个标记: 如果token是一个操作数,那么push-Java有一个堆栈类,所以使用它。 如果令牌是运算符,则从堆栈中弹出操作数并执行该操作,然后将答案推回堆栈。 谢谢但赋值的重点是使用字符串操作。我认为String.split或StringTokenize

我试图通过一个子程序来理解以下指令:

i=1


而i则表示您试图访问字符数组之外的字符,即字符数组的长度为10,您试图获取第11个字符

解决问题的更好方法是首先使用String.split或StringTokenizer标记表达式,然后循环遍历每个标记:

如果token是一个操作数,那么push-Java有一个堆栈类,所以使用它。 如果令牌是运算符,则从堆栈中弹出操作数并执行该操作,然后将答案推回堆栈。
谢谢但赋值的重点是使用字符串操作。我认为String.split或StringTokenize是操作字符串的方法。如果您必须循环遍历每个字符,而不使用堆栈计算表达式,那么我认为您是在浪费时间。头脑正常的人不应该指望你这么做。没有堆栈,你不能计算后缀或任何其他类型的-修复。不清楚你在问什么。您是否希望以某种方式使用字符串作为堆栈?若然,原因为何?
static int eval(String postfix){
    int  result = 0;
    String temp2 ="";

    for (int i=0 ; i<postfix.length(); i++) {
        if (postfix.charAt(i)  !=')' && postfix.charAt(i)!= '(' && postfix.charAt(i)!= p(infix.charAt(i)))
            temp2 += postfix.charAt(i);

        int num1,num2;
        char operator;

            do { 
                i++;            
            } while ( Character.isDigit(postfix.charAt(i)));

            num1 = Integer.parseInt(postfix.substring(0,i));
            operator = postfix.charAt(i++);
            num2 = //Double.parseDouble(expression.substring(i));
                Integer.parseInt(postfix.substring(i+1));



            result = num1 + num2;
            result = num1 - num2;
            result = num1 * num2;
            result = num1 / num2;

            switch (operator) {

            case '+' : result = num1 + num2; break;
            case '-' : result = num1 - num2; break;
            case '*' : result = num1 * num2; break;
            case '/' : result = num1 / num2; break;



            }


    }




    return result;
}