すでにSOにこれと同様の質問があることは知っていますが、私が抱えている問題を解決する質問を見つけることができません。正しい出力を得るために演算子の優先順位を実装しながら、中置記法式を後置記法に変換するメソッドを作成しようとしています。私は通常のメソッド(push、pop、peekなど)を使用して独自のスタッククラスを作成しましたが、これは完全に正常に機能します。私の問題は、A-(B + C ^ D ^ C)/ D * Bなどのより複雑な式の場合、間違った出力が得られることです。変換の結果はABCDC^^+ D / B *-になるはずですが、私はABCDC ^^ + D/-Bを取得し続けます
これが私の方法です:
public static String infixToPostfix(char[] expressionArray, CharStack opStack){
String output = "";
int length = expressionArray.length;
for(int i = 0; i < length; i++){
if(isOperatorOrBracket(expressionArray[i])){
if(priorityAtInput(expressionArray[i]) >= priorityAtStack(opStack.peek())){
opStack.push(expressionArray[i]);
}else if(priorityAtInput(expressionArray[i]) == priorityAtStack(opStack.peek())){
output = output + expressionArray[i];
}else{
while(opStack.peek() != '('){
output = output + opStack.pop();
}
opStack.pop();
}
}else{
output = output + expressionArray[i];
}
}
while(!opStack.empty()){
if(opStack.peek() != '('){
output = output + opStack.pop();
}else if(opStack.peek() == '('){
opStack.pop();
}
}
return output;
}
コンポーネントメソッドのいずれかが必要な場合はお知らせください。どんな助けでも大歓迎です!