Java 求解四则混合运算题目

在日常生活中,我们经常会遇到四则混合运算的题目,比如数学考试中的题目,或者日常的财务计算。利用 Java 编程语言,我们可以轻松地将这些运算过程自动化,从而提高计算的效率与准确性。

本文将介绍如何使用 Java 编写代码来求解四则混合运算题目,包括加、减、乘、除四种基本运算。我们还将通过一个实例来展示这些概念,并通过序列图来描述程序的执行过程。

四则混合运算的基本概念

四则混合运算是指将加法、减法、乘法和除法结合在一起进行计算。在进行运算时,通常遵循以下优先级:

  1. 括号内的运算;
  2. 乘法和除法(从左到右);
  3. 加法和减法(从左到右)。

在 Java 中,我们可以充分利用其内置运算符来进行这些运算。接下来,我们将编写一个简单的 Java 程序来解析并计算一个包含四则混合运算的字符串。

Java 示例代码

下面是一个基本的 Java 程序示例,用于求解用户输入的四则混合运算表达式。

import java.util.Stack;

public class FourArithmeticOperations {

    public static void main(String[] args) {
        String expression = "3 + 5 * (2 - 8)";
        try {
            double result = evaluateExpression(expression);
            System.out.println("The result of the expression: " + expression + " is " + result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static double evaluateExpression(String expression) {
        // 处理优先级和运算
        char[] tokens = expression.toCharArray();
        
        Stack<Double> values = new Stack<>();
        Stack<Character> operators = new Stack<>();

        for (int i = 0; i < tokens.length; i++) {
            if (tokens[i] == ' ') {
                continue;
            }

            if (tokens[i] >= '0' && tokens[i] <= '9') {
                StringBuilder buffer = new StringBuilder();
                while (i < tokens.length && (tokens[i] >= '0' && tokens[i] <= '9' || tokens[i] == '.')) {
                    buffer.append(tokens[i++]);
                }
                values.push(Double.parseDouble(buffer.toString()));
                i--; // Adjust for the outer loop
            } else if (tokens[i] == '(') {
                operators.push(tokens[i]);
            } else if (tokens[i] == ')') {
                while (operators.peek() != '(') {
                    values.push(applyOperation(operators.pop(), values.pop(), values.pop()));
                }
                operators.pop();
            } else if (isOperator(tokens[i])) {
                while (!operators.empty() && precedence(operators.peek()) >= precedence(tokens[i])) {
                    values.push(applyOperation(operators.pop(), values.pop(), values.pop()));
                }
                operators.push(tokens[i]);
            }
        }

        while (!operators.empty()) {
            values.push(applyOperation(operators.pop(), values.pop(), values.pop()));
        }

        return values.pop();
    }

    public static boolean isOperator(char c) {
        return c == '+' || c == '-' || c == '*' || c == '/';
    }

    public static int precedence(char operator) {
        switch (operator) {
            case '+':
            case '-':
                return 1;
            case '*':
            case '/':
                return 2;
        }
        return -1;
    }

    public static double applyOperation(char operator, double b, double a) {
        switch (operator) {
            case '+': return a + b;
            case '-': return a - b;
            case '*': return a * b;
            case '/': return a / b;
        }
        return 0;
    }
}

代码解析

  1. 输入:用户输入一个数学表达式,例如 "3 + 5 * (2 - 8)"
  2. 栈结构:使用两个栈,一个来存储数字,另一个来存储运算符。
  3. 循环遍历:逐个遍历字符串中的字符,进行不同的操作。
  4. 计算结果:通过运用运算符,对栈中的值进行计算并返回最终结果。

程序执行流程

为了便于理解程序执行的过程,下面是一个简单的序列图,描绘了程序运行时的步骤:

sequenceDiagram
    participant User
    participant Parser
    participant Evaluator
    User->>Parser: 提交表达式
    Parser->>Evaluator: 解析表达式
    Evaluator->>Evaluator: 进行计算
    Evaluator-->>Parser: 返回结果
    Parser-->>User: 输出结果

总结

通过本篇文章,我们学习了如何用 Java 编写程序来求解四则混合运算题目。我们了解了四则运算的基本概念,来处理用户输入进行计算的方式,以及如何利用栈数据结构来优雅地实现运算优先级的控制。

使用 Java,求解数学问题变得简单而高效。希望读者能够将这些概念应用到自己的项目中,帮助他们更深入地理解编程和数学运算的结合。随着学习的深入,可以尝试实现更复杂的表达式解析器,探索更广泛的数学计算应用。