Java简单计算器程序设计与实现:支持加减乘除运算

程序设计思路

在设计一个简单的计算器程序时,我们需要明确程序的功能需求、模块划分以及技术实现方式。以下是详细的设计思路:

1. 功能需求

  • 基本运算支持:程序需要支持四种基本的数学运算,即加法(+)、减法(-)、乘法(*)和除法(/)。
  • 用户交互:程序应提供友好的用户交互界面,提示用户输入必要的信息(如数字和运算符),并显示计算结果。
  • 错误处理:对于可能出现的错误情况(如除数为零、无效的运算符输入等),程序应能够进行适当的处理,并给出友好的提示信息。
  • 重复使用:程序应允许用户在一次运行中多次使用计算器,直到用户明确选择退出。

2. 模块划分

为了使程序结构清晰、易于理解和维护,我们将程序划分为以下几个主要模块:

  • 输入模块:负责获取用户输入的两个数字和一个运算符。这一模块需要确保用户输入的内容符合预期格式,并在必要时进行提示和校验。
  • 运算模块:根据用户输入的运算符,对两个数字执行相应的数学运算,并返回计算结果。这一模块是程序的核心逻辑部分,需要准确地实现各种运算规则。
  • 输出模块:将计算结果展示给用户。如果计算过程中出现错误(如除数为零、无效运算符等),则输出相应的错误提示信息。
  • 主控制模块:管理程序的整体运行流程,包括循环调用输入、运算和输出模块,以及根据用户的选择决定是否继续运行程序。

3. 技术实现

  • 输入输出:使用Java的Scanner类来实现从控制台获取用户输入,并通过System.out.printSystem.out.println方法向用户显示提示信息和计算结果。
  • 条件语句:使用if-elseswitch语句来根据用户输入的运算符选择相应的运算逻辑。
  • 循环结构:使用whiledo-while循环来实现程序的重复使用功能,允许用户在一次程序运行中多次进行计算。
  • 错误处理:通过检查用户输入的运算符是否合法,以及在执行除法运算时判断除数是否为零,来避免程序出现运行时错误,并给出相应的提示信息。

Java代码实现

以下是完整的Java代码实现,代码中包含了详细的注释,解释了每一部分的功能和实现方式。

import java.util.Scanner;

public class SimpleCalculator {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // 创建Scanner对象用于获取用户输入
        boolean continueCalculation = true; // 控制程序是否继续运行的标志

        // 使用do-while循环确保程序至少运行一次
        do {
            // 提示用户输入第一个数字
            System.out.print("请输入第一个数字: ");
            double num1 = scanner.nextDouble();

            // 提示用户输入第二个数字
            System.out.print("请输入第二个数字: ");
            double num2 = scanner.nextDouble();

            // 提示用户输入运算符
            System.out.print("请输入运算符 (+, -, *, /): ");
            char operator = scanner.next().charAt(0);

            // 调用calculate方法计算结果
            double result = calculate(num1, num2, operator);

            // 检查结果是否有效
            if (Double.isNaN(result)) {
                System.out.println("无效的运算符或除数为零!");
            } else {
                System.out.println("结果: " + result);
            }

            // 询问用户是否继续使用计算器
            System.out.print("是否继续使用计算器? (yes/no): ");
            String response = scanner.next();
            continueCalculation = response.equalsIgnoreCase("yes");
        } while (continueCalculation);

        System.out.println("感谢使用计算器,再见!");
        scanner.close(); // 关闭Scanner对象
    }

    /**
     * 计算两个数字的运算结果
     *
     * @param num1 第一个数字
     * @param num2 第二个数字
     * @param operator 运算符
     * @return 计算结果,如果运算符无效或除数为零,返回NaN
     */
    public static double calculate(double num1, double num2, char operator) {
        switch (operator) {
            case '+':
                // 加法运算
                return num1 + num2;
            case '-':
                // 减法运算
                return num1 - num2;
            case '*':
                // 乘法运算
                return num1 * num2;
            case '/':
                // 除法运算
                if (num2 != 0) {
                    return num1 / num2;
                } else {
                    return Double.NaN; // 返回NaN表示无效值
                }
            default:
                // 如果运算符不是上述四种之一,返回NaN
                return Double.NaN; // 返回NaN表示无效值
        }
    }
}

程序详细解释

1. 导入必要的包

import java.util.Scanner;
  • java.util.Scanner 是Java标准库中的一个类,用于从控制台获取用户输入。它提供了多种方法来读取不同类型的数据,如整数、浮点数、字符串等。

2. 主程序入口

public class SimpleCalculator {
    public static void main(String[] args) {
  • public class SimpleCalculator 定义了一个名为 SimpleCalculator 的类。类是Java中的基本单位,用于封装数据和行为。
  • public static void main(String[] args) 是Java程序的入口点。程序从这里开始执行。main 方法的参数 args 是一个字符串数组,用于接收命令行参数,但在本程序中未使用。

3. 创建Scanner对象

Scanner scanner = new Scanner(System.in);
  • Scanner 对象用于从控制台读取用户输入。
  • System.in 表示标准输入流,通常是键盘输入。通过将 System.in 传递给 Scanner 的构造函数,我们可以创建一个用于读取用户输入的对象。

4. 控制程序运行的标志

boolean continueCalculation = true;
  • continueCalculation 是一个布尔变量,用于控制程序是否继续运行。
  • 初始值为 true,表示程序开始时默认继续运行。在程序运行过程中,根据用户的输入决定是否将该变量设置为 false,从而退出循环。

5. 主循环

do {
  • 使用 do-while 循环实现程序的重复运行。do-while 循环的特点是它至少会执行一次循环体,然后根据条件判断是否继续执行。
  • 这里使用 do-while 循环而不是 while 循环的原因是,我们希望程序在启动后至少运行一次,让用户有机会进行一次计算。

6. 获取用户输入

System.out.print("请输入第一个数字: ");
double num1 = scanner.nextDouble();
  • System.out.print 用于向控制台输出提示信息,提示用户输入第一个数字。
  • scanner.nextDouble() 用于从用户输入中读取一个双精度浮点数,并将其赋值给变量 num1nextDouble 方法会自动跳过用户输入的换行符,直接读取下一个浮点数。
System.out.print("请输入第二个数字: ");
double num2 = scanner.nextDouble();
  • 同样从用户输入中读取第二个数字,并将其赋值给变量 num2
System.out.print("请输入运算符 (+, -, *, /): ");
char operator = scanner.next().charAt(0);
  • 提示用户输入运算符。
  • scanner.next() 读取用户输入的字符串,charAt(0) 获取字符串的第一个字符,并将其赋值给变量 operator。这里假设用户输入的运算符是一个字符,如果用户输入了多个字符,程序只会取第一个字符作为运算符。

7. 调用计算方法

double result = calculate(num1, num2, operator);
  • 调用 calculate 方法,传入两个数字和运算符,计算结果并返回。
  • 返回的结果存储在变量 result 中。calculate 方法是程序的核心逻辑部分,它根据运算符执行相应的数学运算,并返回计算结果。

8. 检查结果并输出

if (Double.isNaN(result)) {
    System.out.println("无效的运算符或除数为零!");
} else {
    System.out.println("结果: " + result);
}
  • 使用 Double.isNaN(result) 检查结果是否为 NaN(Not a Number,表示无效值)。NaN 是一个特殊的浮点数值,用于表示无效或未定义的数学运算结果。
  • 如果结果是 NaN,输出错误信息,提示用户输入了无效的运算符或除数为零;否则输出计算结果。

9. 询问用户是否继续

System.out.print("是否继续使用计算器? (yes/no): ");
String response = scanner.next();
continueCalculation = response.equalsIgnoreCase("yes");
  • 提示用户是否继续使用计算器。
  • 读取用户输入的字符串,并将其存储在变量 response 中。
  • 使用 equalsIgnoreCase 方法检查用户输入是否为 "yes",如果是,则将 continueCalculation 设置为 true,程序继续运行;否则设置为 false,程序退出循环。

10. 关闭Scanner对象

scanner.close();
  • 在程序结束时关闭 Scanner 对象,释放资源。这是一个良好的编程习惯,可以避免潜在的资源泄漏问题。

11. 计算方法

public static double calculate(double num1, double num2, char operator) {
    switch (operator) {
        case '+':
            // 加法运算
            return num1 + num2;
        case '-':
            // 减法运算
            return num1 - num2;
        case '*':
            // 乘法运算
            return num1 * num2;
        case '/':
            // 除法运算
            if (num2 != 0) {
                return num1 / num2;
            } else {
                return Double.NaN; // 返回NaN表示无效值
            }
        default:
            // 如果运算符不是上述四种之一,返回NaN
            return Double.NaN; // 返回NaN表示无效值
    }
}
  • calculate 方法用于根据运算符执行相应的运算。
  • 使用 switch 语句根据运算符选择不同的操作:
    • 如果运算符是 '+',返回两个数字的和。
    • 如果运算符是 '-',返回两个数字的差。
    • 如果运算符是 '*',返回两个数字的乘积。
    • 如果运算符是 '/',检查第二个数字是否为零。如果为零,返回 NaN;否则返回两个数字的商。
    • 如果运算符不是上述四种之一,返回 NaN

程序运行示例

以下是一个程序运行的示例:

请输入第一个数字: 10
请输入第二个数字: 5
请输入运算符 (+, -, *, /): +
结果: 15.0
是否继续使用计算器? (yes/no): yes
请输入第一个数字: 10
请输入第二个数字: 5
请输入运算符 (+, -, *, /): -
结果: 5.0
是否继续使用计算器? (yes/no): yes
请输入第一个数字: 10
请输入第二个数字: 5
请输入运算符 (+, -, *, /): *
结果: 50.0
是否继续使用计算器? (yes/no): yes
请输入第一个数字: 10
请输入第二个数字: 0
请输入运算符 (+, -, *, /): /
无效的运算符或除数为零!
是否继续使用计算器? (yes/no): no
感谢使用计算器,再见!
posted @ 2025-04-06 10:00  软件职业规划  阅读(225)  评论(0)    收藏  举报