我正在尝试实现后缀转换器的中缀,但我在输出时遇到了一些麻烦,即括号。当我尝试用括号传递任何内容时,请说:
(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;
}