实现Java四则混合运算
在学习编程的过程中,实现一个简单的混合四则运算器是一个非常有趣的项目。这个项目能够帮助你理解基本的运算符、字符串处理以及引入条件判断。接下来,我将为你提供一个清晰的流程和代码示例,帮助你理解如何实现这个项目。
流程概述
下面是实现四则混合运算的主要步骤:
步骤 | 说明 |
---|---|
1. 用户输入表达式 | 接收用户输入的数学表达式 |
2. 解析表达式 | 将输入的字符串解析为数字和运算符 |
3. 计算结果 | 根据运算符进行计算,并处理优先级 |
4. 输出结果 | 将计算结果输出到用户界面 |
以下是用Mermaid语法表示的流程图:
flowchart TD
A[用户输入表达式] --> B[解析表达式]
B --> C[计算结果]
C --> D[输出结果]
每一步的详细说明及代码
1. 用户输入表达式
我们首先需要接收用户输入的数学表达式。可以使用 Scanner
类来处理用户输入。
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入数学表达式(例如:3 + 5 * 2):");
String input = scanner.nextLine(); // 接收用户输入
// 后续步骤...
}
}
2. 解析表达式
解析输入字符串并将其分割为数字和运算符,可以使用正则表达式。
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Calculator {
// ...前面的代码...
private static List<String> parseInput(String input) {
List<String> parsedInput = new ArrayList<>();
Matcher matcher = Pattern.compile("\\d+(\\.\\d+)?|[+\\-*/()]").matcher(input);
while (matcher.find()) {
parsedInput.add(matcher.group()); // 将数字和运算符添加到列表
}
return parsedInput;
}
}
3. 计算结果
在这一步,我们根据运算符进行计算。在处理优先级的情况下,我们可以使用两个栈:一个栈存放数字,一个栈存放运算符。
private static double evaluate(List<String> tokens) {
Stack<Double> numbers = new Stack<>();
Stack<String> operators = new Stack<>();
for (String token : tokens) {
if (token.matches("\\d+(\\.\\d+)?")) { // 判断是否为数字
numbers.push(Double.parseDouble(token));
} else {
// 处理运算符...
while (!operators.isEmpty() && precedence(operators.peek()) >= precedence(token)) {
// 进行计算
double b = numbers.pop();
double a = numbers.pop();
String operator = operators.pop();
numbers.push(applyOperation(a, b, operator));
}
operators.push(token); // 将运算符推入栈中
}
}
// 最后计算剩余的运算符
while (!operators.isEmpty()) {
double b = numbers.pop();
double a = numbers.pop();
String operator = operators.pop();
numbers.push(applyOperation(a, b, operator));
}
return numbers.pop(); // 返回最终结果
}
private static int precedence(String operator) {
if (operator.equals("+") || operator.equals("-")) return 1;
if (operator.equals("*") || operator.equals("/")) return 2;
return 0;
}
private static double applyOperation(double a, double b, String operator) {
switch (operator) {
case "+" -> {
return a + b;
}
case "-" -> {
return a - b;
}
case "*" -> {
return a * b;
}
case "/" -> {
if (b == 0) throw new UnsupportedOperationException("Cannot divide by zero");
return a / b;
}
}
return 0;
}
4. 输出结果
最后,我们将计算结果输出到用户界面。
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入数学表达式(例如:3 + 5 * 2):");
String input = scanner.nextLine();
List<String> tokens = parseInput(input); // 解析输入
double result = evaluate(tokens); // 计算结果
System.out.println("计算结果为:" + result); // 输出结果
}
饼状图示例
最后,想象一下,如果我们将各个运算符计算的数量用饼状图表示,可以用以下Mermaid代码:
pie
title 运算符使用情况
"加法": 40
"减法": 30
"乘法": 20
"除法": 10
结尾
通过以上步骤,我们实现了一个简单的四则混合运算器。你不仅学会了如何解析字符串、处理数据结构,还掌握了运算符的优先级管理。这个项目能帮助你在编程的道路上打下坚实的基础,继续探索更复杂的算法和数据结构吧!希望这篇文章对你有所帮助。