接頭辞操作 (つまり、"4 + 2" ではなく "+ 4 2" と記載されている操作) の要素を含む Queue<String> を取り込んで出力するプログラムがあります。整数の答え (double は必要ないと仮定してください)。乗算または除算演算では正しく機能しますが、加算または減算演算では失敗し、さらに悪いことに、一貫性のない方法で失敗します。たとえば、"- 5 1" への出力は 5 であり、これは整数を 1 つ追加していることを示唆していますが、"- 5 2" への出力は 2 であり、1 つの整数が低すぎます。このエラーのロジックがどこにあるのかわかりませんか?
public static int eval(Queue<String> s){
String a=s.toString();
String b= a.replaceAll("\\[","").replaceAll("\\]","").replace(", "," ");
StringBuilder c=new StringBuilder();
c.append(b);
c.reverse();
Stack<Integer> stack=new Stack<>();
for (int i=0; i<c.length();i++){
char current=c.charAt(i);
if (current==' ')
continue;
if (current=='*'||current=='/'||current=='+'||current=='-'){
Integer one = stack.pop();
Integer two = stack.pop();
Integer maybe;
switch (current){
case '+':
maybe=one+two;
case '-':
maybe=one-two;
case '*':
maybe=one*two;
case '/':
maybe=one/two;
break;
default:
maybe=one;
}
stack.push(maybe);
} else {
StringBuilder maybe=new StringBuilder();
while(Character.isDigit(current)){
maybe.append(current);
i++;
current=c.charAt(i);
}
i--;
Integer n=Integer.parseInt(maybe.reverse().toString());
stack.push(n);
}
}
return stack.pop();
}
}
編集:注:単純な2つの整数、1つの演算子、方程式しか出力できませんが、それを変更する方法は理解できます。