初めて投稿するので改善方法を教えてください。
私は中置記法を後置記法に変換してから評価するプログラムに取り組んでいます。postfix への変換はうまくいきましたが、評価に問題があります。以下のコードでは、オペランドを倍精度変数「数値」に変換しようとすると、値が維持されません (以下の実行時出力を参照)。問題のメソッドの一部を次に示します (print ステートメントはデバッグ専用です)。
public boolean evaluatePostfix(StringBuffer postfix)
{
Stack <Double> operand = new Stack <Double>();//stack to hold operand values
double answer = 0; //variable to hold result of expression
boolean error = false; //tests for input error
int pos = 0; //temp veraible stores position in postfix expression
double number = 0; //temp variable to convert char to double. also stores that value for reference
double val1 = 0; //first value for operations
double val2 = 0; //second value for operations
double val3 = 0; //answer for val1 and val2
while (!error && pos < postfix.length())
{
System.out.println(postfix.charAt(pos));
if (postfix.charAt(pos) == ' ')
; //do nothing
else if (Character.isDigit(postfix.charAt(pos)))
{
number = Double.parseDouble(postfix.substring(pos));
System.out.printf ("number = %f", number);
operand.push(number);
}
else
{
val1 = operand.pop();
val2 = operand.pop();
System.out.printf ("val1: %f\tval2: %f\n", val1, val2);
---実行時--- 1
番号 = 49.000000
8
番号 = 56.000000
+
val1: 56.000000
val2: 49.000000
val3 = 105.000000
105.0