gpt4 book ai didi

java - java中如何计算表达式?

转载 作者:行者123 更新时间:2023-12-03 00:08:39 26 4
gpt4 key购买 nike

如何在java中计算用户给定的表达式。

E:g,如果给定的exp是3*4+(5*6)如何计算这个。谁能帮帮我。

最佳答案

我在快速谷歌后找到了这段代码:

import java.util.Stack;

/**
* Class to evaluate infix and postfix expressions.
*
* @author Paul E. Davis (feedback@willcode4beer.com)
*/
public class InfixPostfixEvaluator {

/**
* Operators in reverse order of precedence.
*/
private static final String operators = "-+/*";
private static final String operands = "0123456789";

public int evalInfix(String infix) {
return evaluatePostfix(convert2Postfix(infix));
}

public String convert2Postfix(String infixExpr) {
char[] chars = infixExpr.toCharArray();
Stack<Character> stack = new Stack<Character>();
StringBuilder out = new StringBuilder(infixExpr.length());

for (char c : chars) {
if (isOperator(c)) {
while (!stack.isEmpty() && stack.peek() != '(') {
if (operatorGreaterOrEqual(stack.peek(), c)) {
out.append(stack.pop());
} else {
break;
}
}
stack.push(c);
} else if (c == '(') {
stack.push(c);
} else if (c == ')') {
while (!stack.isEmpty() && stack.peek() != '(') {
out.append(stack.pop());
}
if (!stack.isEmpty()) {
stack.pop();
}
} else if (isOperand(c)) {
out.append(c);
}
}
while (!stack.empty()) {
out.append(stack.pop());
}
return out.toString();
}

public int evaluatePostfix(String postfixExpr) {
char[] chars = postfixExpr.toCharArray();
Stack<Integer> stack = new Stack<Integer>();
for (char c : chars) {
if (isOperand(c)) {
stack.push(c - '0'); // convert char to int val
} else if (isOperator(c)) {
int op1 = stack.pop();
int op2 = stack.pop();
int result;
switch (c) {
case '*':
result = op1 * op2;
stack.push(result);
break;
case '/':
result = op2 / op1;
stack.push(result);
break;
case '+':
result = op1 + op2;
stack.push(result);
break;
case '-':
result = op2 - op1;
stack.push(result);
break;
}
}
}
return stack.pop();
}
private int getPrecedence(char operator) {
int ret = 0;
if (operator == '-' || operator == '+') {
ret = 1;
} else if (operator == '*' || operator == '/') {
ret = 2;
}
return ret;
}
private boolean operatorGreaterOrEqual(char op1, char op2) {
return getPrecedence(op1) >= getPrecedence(op2);
}

private boolean isOperator(char val) {
return operators.indexOf(val) >= 0;
}

private boolean isOperand(char val) {
return operands.indexOf(val) >= 0;
}

}

来自:http://willcode4beer.com/design.jsp?set=evalInfix

关于java - java中如何计算表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7185589/

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