24.11.25

[实验任务一]:多次撤销
改进课堂上的“用户信息操作撤销”实例,使得系统可以实现多次撤销(可以使用HashMap、ArrayList等集合数据结构实现)。
实验要求:

  1. 画出对应的类图;
    image

  2. 提交源代码;
    package org.test.ruanjiansheji.beiwanglu;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

// 抽象命令接口
interface AbstractCommand {
int execute(int value); // 执行操作
int undo(); // 撤销操作
}

// Adder 类,用于实现累加功能
class Adder {
private int num = 0;

public int add(int value) {
    num += value;
    return num;
}

}

// 具体命令类
class ConcreteCommand implements AbstractCommand {
private Adder adder = new Adder();
private List list = new ArrayList<>();

@Override
public int execute(int value) {
    list.add(value);
    return adder.add(value);
}

@Override
public int undo() {
    if (!list.isEmpty()) {
        int value = list.remove(list.size() - 1);
        return adder.add(-value);
    } else {
        return 0;
    }
}

}

// CalculatorForm 类,作为命令的客户端
class CalculatorForm {
private AbstractCommand command;

public void setCommand(AbstractCommand command) {
    this.command = command;
}

public void compute(int value) {
    int result = command.execute(value);
    System.out.println("执行运算,运算结果为:" + result);
}

public void undo() {
    int result = command.undo();
    System.out.println("执行撤销,运算结果为:" + result);
}

}

// 主程序
public class Calculator {
public static void main(String[] args) {
CalculatorForm form = new CalculatorForm();
ConcreteCommand command = new ConcreteCommand();
form.setCommand(command);

    boolean flag = true;
    Scanner scanner = new Scanner(System.in);

    while (flag) {
        System.out.println("请输入想要操作的选项,1为计算,-1为撤销,0为退出");
        int n = scanner.nextInt();

        switch (n) {
            case 1:
                System.out.println("请输入想要添加的数值");
                int m = scanner.nextInt();
                form.compute(m);
                break;
            case -1:
                form.undo();
                break;
            case 0:
                flag = false;
                break;
            default:
                System.out.println("输入错误请重新输入!!");
                break;
        }
    }

    scanner.close();
}

}

  1. 注意编程规范。
posted @ 2024-11-25 19:12  起名字真难_qmz  阅读(13)  评论(0)    收藏  举报