gpt4 book ai didi

java - 后缀评估器

转载 作者:行者123 更新时间:2023-12-02 00:25:55 28 4
gpt4 key购买 nike

我想创建一个可处理多位数字和十进制数字的 Postfix Evaluator。该程序适用于多位数,但不适用于小数。我怎样才能做到这一点?我使用了中缀表达式: "10 + 20 * ( 50/3 ) + 4",在后缀中是 "10 20 50 3/* + 4 +"。结果我得到了 347.33333333333337,这是正确的。我只需要评估器能够处理十进制数字。

public class EvaluarExpresion {
public static double evaluaExpresion (String postfija) {
MyStack<Double> stack = new MyStack<Double>();
//String postfija= expresionPostFijo();
for(int i = 0; i < postfija.length(); i++) {
char c = postfija.charAt(i);
if(c == ' ') {
continue;
}else if(Character.isDigit(c) || c == '.') {
int n = 0;
int divider =1;
boolean hasDecimal = false;

while(Character.isDigit(c) || c == '.') {
if(c == '.') {
hasDecimal = true;
} else {
if(hasDecimal) {
divider *=10;
}

n = n*10 + (int)(c-'0');
c = postfija.charAt(i);
}
i++;
}
i--;
stack.push((double) n);
} else {
Double val1 = stack.pop();
Double val2 = stack.pop();
switch(c)
{
case '+':
stack.push(val2+val1);
break;

case '-':
stack.push(val2- val1);
break;

case '/':
stack.push(val2/val1);
break;

case '*':
stack.push(val2*val1);
break;
case '^':
stack.push(Math.pow(val2, val1));
break;
}
}
}
return stack.pop();
}

public static void main(String[] args) {
// This is an example of an infix expression String dato = "10 + 20 * ( 50 / 3 ) + 4";
//The expression provided below is a postfix expression
System.out.println(evaluaExpresion("10 20 50 3 / * + 4 +"));
//The result is 347.33333333333337 which is correct


}
}

最佳答案

有多种方法可以实现这一点。您需要做的是查找“.”字符,并在找到小数点后开始除以 10 的幂的过程。以下方法应该可行,并且一步完成所有除法,减少舍入误差:

        } else if (Character.isDigit(c) || c == '.') { 
int n = 0;
int divider = 1;
boolean hasDecimal = false;

while (Character.isDigit(c) || c == '.') {
if (c == '.') {
hasDecimal = true;
} else {
if (hasDecimal) {
divider *= 10;
}

n = n * 10 + (int) (c - '0');

c = postfija.charAt(i);
}
i++;
}

i--;
stack.push((double) n / divider);
} else { // etc...

关于java - 后缀评估器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58051148/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com