0

我正在尝试实现后缀转换器的中缀,但我在输出时遇到了一些麻烦,即括号。当我尝试用括号传递任何内容时,请说:

(1*2*3^1)

我得到一个 NoSuchElementException。有谁知道怎么了?

一些注意事项:我将一个标记化字符串的双端队列作为中缀传递(因此我仅限于双端队列方法)并返回后缀的字符串双端队列。任何帮助表示赞赏。

这是我有问题的方法:

private static Deque<String>shuntingYard(Deque<String> infixQ){
  Deque<String> opS = new LinkedList<String>();
  Deque<String> outputQ = new LinkedList<String>();
  String token;
  while(!infixQ.isEmpty()){
     token = infixQ.removeFirst();
     if(isNumeric(token) || isAlpha(token)){
        outputQ.addLast(token);
     }
     if(token.equals("(")){
        opS.addFirst(token);
     }
     if(token.equals(")")){
        opS.addFirst(token);
        while(!outputQ.peekFirst().equals("(")){
              outputQ.addLast(opS.removeFirst());
        }
        opS.removeFirst();
     }

     if(isOperator(token)){
         while(!opS.isEmpty() && !(opS.peekFirst().equals("(") && prec(token) <= prec(opS.peekFirst()))){ 
           outputQ.addLast(opS.removeFirst());
        }
        opS.addFirst(token);
     }       
   }
   while(!opS.isEmpty()){
     outputQ.addLast(opS.removeFirst());
   }
   return outputQ;
}  
4

0 回答 0