第一次发帖,请多多指教,如何改进。
我正在开发一个程序,将中缀表示法转换为后缀,然后进行评估。我向 postfix 的转换进展顺利,但我的评估遇到了一些问题。在下面的代码中,当我尝试将操作数转换为双变量“数字”时,它们不会保持其值(请参阅下面的运行时输出)。这是相关方法的一部分(打印语句仅用于调试)。
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);
---At runtime--- 1
number = 49.000000
8
number = 56.000000
+
val1: 56.000000
val2: 49.000000
val3 = 105.000000
105.0
最佳答案
您正在获取每个字符的 ASCII 值,例如'1' => 49
并将其插入堆栈。
您最有可能想要的是使用 Scanner读取从您输入的文本转换而来的数字。
关于java - 压入并评估堆栈 <double>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13347975/