diff --git a/Expressionjurge.java b/Expressionjurge.java deleted file mode 100644 index dfae5f4..0000000 --- a/Expressionjurge.java +++ /dev/null @@ -1,96 +0,0 @@ -import java.util.ArrayList; -import java.util.List; -import java.util.Stack; -import java.util.Map; -import java.util.HashMap; - -public class Expressionjurge { - - public boolean hasError(String expression) { - try { - String cleanExpr = expression.replaceAll("\\s+", ""); - List rpn = infixToRPN(cleanExpr); - return evaluateRPN(rpn); - } catch (Exception e) { - return true; // 任何异常都视为有错误 - } - } - - private static List infixToRPN(String expression) { - List output = new ArrayList<>(); - Stack operators = new Stack<>(); - StringBuilder number = new StringBuilder(); - Map precedence = Map.of('+', 1, '-', 1, '*', 2, '/', 2); - for (int i = 0; i < expression.length(); i++) { - char c = expression.charAt(i); - if (Character.isDigit(c) || c == '.') { - number.append(c); - } else { - if (number.length() > 0) { - output.add(Double.parseDouble(number.toString())); - number = new StringBuilder(); - } - if (c == '(') { - operators.push(c); - } else if (c == ')') { - while (!operators.isEmpty() && operators.peek() != '(') { - output.add(operators.pop()); - } - if (!operators.isEmpty()) operators.pop(); - } else if (isOperator(c)) { - while (!operators.isEmpty() && operators.peek() != '(' && - precedence.getOrDefault(operators.peek(), 0) >= precedence.get(c)) { - output.add(operators.pop()); - } - operators.push(c); - } - } - } - if (number.length() > 0) { - output.add(Double.parseDouble(number.toString())); - } - while (!operators.isEmpty()) { - output.add(operators.pop()); - } - return output; - } - - private static boolean evaluateRPN(List rpn) { - Stack stack = new Stack<>(); - - for (Object token : rpn) { - if (token instanceof Double) { - stack.push((Double) token); - } else { - char operator = (Character) token; - if (stack.size() < 2) return true; // 表达式错误 - - double b = stack.pop(); - double a = stack.pop(); - double result; - - switch (operator) { - case '+': result = a + b; break; - case '-': - result = a - b; - if (result < 0) return true; // 发现负数 - break; - case '*': result = a * b; break; - case '/': - if (b == 0) return true; // 发现除零 - result = a / b; - if (result < 0) return true; // 发现负数 - break; - default: return true; // 未知运算符 - } - stack.push(result); - } - } - - return stack.size() != 1; // 如果栈中不是恰好一个元素,说明表达式错误 - } - - private static boolean isOperator(char c) { - return c == '+' || c == '-' || c == '*' || c == '/'; - } -} \ No newline at end of file