Menu
CoddyTech

复习:简单计算器

本课属于 Coddy Dart 学习旅程的“面向对象编程”单元。第 9 课,共 110 课。

challenge icon

挑战

中等

在 calculator.dart 中编写一个完整的 Calculator 类,综合运用你学到的所有知识。driver.dart 文件会导入并测试你的类。

你的 Calculator 类必须展示本单元涵盖的所有主题:

  1. 外部文件:driver.dart 会使用 import 'calculator.dart'; 导入 calculator.dart
  2. 库和导入:driver.dart 使用 import 'dart:io';
  3. 面向对象编程简介:定义 class Calculator,并使用 Calculator() 创建对象
  4. 类与对象:每个测试都会创建一个全新的 Calculator 对象,并拥有独立的状态
  5. this 关键字:在所有方法中使用 this.result 访问实例变量
  6. 方法:实现 add、subtract、multiply、divide、clear 和 getResult
  7. 实例变量:将 int result = 0 声明为实例变量
  8. 构造函数基础:添加一个 Calculator() 构造函数,将 result 设为 0,并打印 'Calculator ready'

方法要求:

  • int add(int number):将 number 加到 result 上,并返回新的结果
  • int subtract(int number):从 result 中减去 number,并返回新的结果
  • int multiply(int number):将 result 乘以 number,并返回新的结果
  • int divide(int number):使用整数除法(~/=)将 result 除以 number,并返回新的结果。如果 number 为 0,则准确打印 'Error: Division by zero',并返回未更改的结果
  • void clear():将 result 重置为 0
  • int getResult():返回当前的 result

用法示例:

Calculator calc = Calculator(); // prints: Calculator ready
calc.add(10);                  // result = 10
calc.multiply(3);              // result = 30
calc.subtract(5);              // result = 25
calc.divide(5);                // result = 5
calc.divide(0);                // prints: Error: Division by zero
calc.clear();                  // result = 0

亲手试试

import 'calculator.dart';
import 'dart:io';

void main() {
  String testCase = stdin.readLineSync()!;

  if (testCase == 'constructor_test') {
    Calculator calc = Calculator();
    print('Initial result: ${calc.getResult()}');
    print('Calculator created successfully');

  } else if (testCase == 'addition_test') {
    Calculator calc = Calculator();
    int r1 = calc.add(10);
    print('After adding 10: $r1');
    int r2 = calc.add(5);
    print('After adding 5: $r2');
    print('Final result: ${calc.getResult()}');

  } else if (testCase == 'subtraction_test') {
    Calculator calc = Calculator();
    calc.add(20);
    int r1 = calc.subtract(8);
    print('After subtracting 8 from 20: $r1');
    int r2 = calc.subtract(2);
    print('After subtracting 2: $r2');
    print('Final result: ${calc.getResult()}');

  } else if (testCase == 'multiplication_test') {
    Calculator calc = Calculator();
    calc.add(5);
    int r1 = calc.multiply(4);
    print('After multiplying by 4: $r1');
    int r2 = calc.multiply(2);
    print('After multiplying by 2: $r2');
    print('Final result: ${calc.getResult()}');

  } else if (testCase == 'division_test') {
    Calculator calc = Calculator();
    calc.add(100);
    int r1 = calc.divide(4);
    print('After dividing by 4: $r1');
    int r2 = calc.divide(5);
    print('After dividing by 5: $r2');
    print('Final result: ${calc.getResult()}');

  } else if (testCase == 'division_by_zero_test') {
    Calculator calc = Calculator();
    calc.add(50);
    print('Initial value: ${calc.getResult()}');
    int r = calc.divide(0);
    print('Result after division by zero: $r');
    print('Value unchanged: ${calc.getResult()}');

  } else if (testCase == 'clear_test') {
    Calculator calc = Calculator();
    calc.add(25);
    calc.multiply(3);
    print('Before clear: ${calc.getResult()}');
    calc.clear();
    print('After clear: ${calc.getResult()}');
    print('Current result: ${calc.getResult()}');

  } else if (testCase == 'comprehensive_test') {
    Calculator calc = Calculator();
    calc.add(10);
    calc.multiply(3);
    calc.subtract(5);
    calc.divide(5);
    print('After sequence of operations: ${calc.getResult()}');
    calc.divide(0);
    print('After division by zero attempt: ${calc.getResult()}');
    calc.clear();
    calc.add(100);
    print('After clear and add 100: ${calc.getResult()}');

  } else {
    print('Unknown test case');
  }
}

面向对象编程中的所有课

自己练习: Dart 在线编译器