Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.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
Java 通过堆栈计算负数算术表达式_Java_Math_Stack_Operator Keyword - Fatal编程技术网

Java 通过堆栈计算负数算术表达式

Java 通过堆栈计算负数算术表达式,java,math,stack,operator-keyword,Java,Math,Stack,Operator Keyword,我需要你的帮助,计算负数。 我不能考虑负数。 我不能只计算正数。 如果你能帮我修一下,我会很高兴的 我想确定-代码的复杂性是O(n) import java.util.Stack; 公共类Q2_M3//O(N) { 公共静态双重计算(字符串st) { char[]Arr=st.toCharArray(); 堆栈值=新堆栈();//数字堆栈: Stack oper=new Stack();//运算符的堆栈: 对于(int i=0;i='0'和&Arr[i]='0'和&Arr[i]首先 while(

我需要你的帮助,计算负数。 我不能考虑负数。 我不能只计算正数。 如果你能帮我修一下,我会很高兴的

我想确定-代码的复杂性是O(n)

import java.util.Stack;
公共类Q2_M3//O(N)
{
公共静态双重计算(字符串st)
{
char[]Arr=st.toCharArray();
堆栈值=新堆栈();//数字堆栈:
Stack oper=new Stack();//运算符的堆栈:
对于(int i=0;i='0'和&Arr[i]='0'和&Arr[i]首先


while((i='0'&&Arr[i]='0'&&Arr[i]='0'&&Arr[i]='0'&&Arr[i],因此您确实需要区分二进制运算符
a-b
和一元运算符
-c

根据形式语法,您可以定义一个表达式,例如前缀为数字或-后跟数字

Expression :
    PrefixExpression
    Expression BinaryOp Expression
Prefix:
    NumberOrVar
    - NumberOrVar
    ( Expression )
NumberOrVar:
    0-9
    a-z
在代码中,它变得像

Expression() {
  while(more tokens) {
    Prefix();
    Char op = next input item, will be an operator
    PushOperator(op)
    Prefix()
  }

}

Prefix() {
    Char c = next input
    if(c == '-') {
          PushOperator(UnitaryMinus)
          c = next input
    }
    if(c in 0-9 )
          values.push(c)
}

很抱歉,您的代码没有遵循旨在使代码可读的Java标识符样式约定。请在您要求其他人阅读您的代码之前解决此问题。我看不出有太多样式约定的问题。第一个问题非常好。如果不是因为while循环检查优先级,我会投赞成票,然后是复杂性ty将是O(n)但是,您可以考虑当当前操作符需要与操作符堆栈上的每个操作符进行比较的情况下。这使得复杂性稍微高一些。我不担心这一点,因为您需要一些非常长的字符串来解决。Dijkstra Shunting码算法是一种略微被破坏的形式,被称为O(n)。@SalixalbaI不喜欢通过操纵输入字符串来让它工作。一个好的解析器应该能够按原样处理这个问题,而不是在这么早的阶段就引入黑客攻击。
Expression() {
  while(more tokens) {
    Prefix();
    Char op = next input item, will be an operator
    PushOperator(op)
    Prefix()
  }

}

Prefix() {
    Char c = next input
    if(c == '-') {
          PushOperator(UnitaryMinus)
          c = next input
    }
    if(c in 0-9 )
          values.push(c)
}