Skip to content

简单计算器案例

学完变量和基本语法后,需要一个综合案例来巩固知识。计算器虽然简单,但涵盖了 Java 的核心概念:输入读取、条件判断、循环控制、方法封装。

需求分析

功能说明
加法num1 + num2
减法num1 - num2
乘法num1 * num2
除法num1 / num2(需处理除零)

涉及知识点:Scanner 获取用户输入、switch 多分支判断、while 循环控制。

实现代码

java
import java.util.Scanner;

public class SimpleCalculator {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("========== 简易计算器 ==========");
        System.out.println("支持: + - * / 运算");
        System.out.println();

        while (true) {
            System.out.print("请输入第一个数字: ");
            double num1 = scanner.nextDouble();

            System.out.print("请选择运算 (+ - * /): ");
            String operator = scanner.next();

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

            double result = 0;
            boolean valid = true;

            switch (operator) {
                case "+": result = num1 + num2; break;
                case "-": result = num1 - num2; break;
                case "*": result = num1 * num2; break;
                case "/":
                    if (num2 != 0) {
                        result = num1 / num2;
                    } else {
                        System.out.println("错误: 除数不能为 0!");
                        valid = false;
                    }
                    break;
                default:
                    System.out.println("错误: 不支持的运算符!");
                    valid = false;
            }

            if (valid) {
                System.out.printf("结果: %.2f %s %.2f = %.2f%n",
                    num1, operator, num2, result);
            }

            System.out.print("是否继续 (y/n): ");
            if (!scanner.next().equalsIgnoreCase("y")) {
                System.out.println("感谢使用,再见!");
                break;
            }
            System.out.println();
        }

        scanner.close();
    }
}

知识点解析

Scanner 输入

java
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
double price = scanner.nextDouble();
String name = scanner.next();

注意:连续使用 nextInt() 后使用 nextLine(),可能会读取到空行。解决方案是先调用一次 nextLine() 消费掉换行符。

switch 语句

case 值必须是常量,不能是变量。不要忘记 break,否则会「贯穿」到下一个 case。

浮点数精度

java
// 结果:0.30000000000000004
System.out.println(0.1 + 0.2);

// 解决方案:使用整数运算或 BigDecimal
int a = 1, b = 10;
System.out.println((double) a / b);  // 0.1

进阶练习

添加取模运算 %、支持连续运算 2 + 3 * 4、添加历史记录功能。

后续可阅读:文件读写入门控制台打印案例

基于 VitePress 构建