You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java开发待办事项列表:新手开发者寻求正确实现思路

嘿,作为编程新手能想到提前规划扩展功能真的超棒!先帮你把现有代码里的小语法坑填上,然后咱们聊聊怎么搭一个能轻松加新功能的框架~


一、先修复现有代码的语法问题

你的代码里有两处小错误,先修正一下才能正常运行:

  1. main方法的参数括号写错了,应该是public static void main(String[] args)
  2. ArrayList的初始化需要加括号:new ArrayList<>()

修正后的基础代码:

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

class AddtoList {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入待办任务:");
        String task = scanner.nextLine();
        ArrayList<String> myList = new ArrayList<>();
        myList.add(task);
        System.out.println("任务已添加:" + myList.get(0));
        scanner.close();
    }
}

二、为后续扩展做面向对象设计

如果要加标记完成、删除任务、分类管理这些功能,只用ArrayList<String>就不够灵活了。咱们用面向对象的思路重构,把任务的属性和操作封装起来,后续加功能会非常顺畅。

1. 定义TodoItem类封装单个任务

单个任务不该只是一串文本,它应该有自己的状态和属性,比如是否完成、创建时间。咱们写一个类来装这些:

import java.time.LocalDateTime;

public class TodoItem {
    private String content; // 任务内容
    private boolean isCompleted; // 是否完成
    private LocalDateTime createTime; // 创建时间

    // 构造方法:创建任务时自动初始化状态和时间
    public TodoItem(String content) {
        this.content = content;
        this.isCompleted = false; // 默认未完成
        this.createTime = LocalDateTime.now(); // 自动记录当前时间
    }

    // 标记任务为已完成的方法
    public void markAsCompleted() {
        this.isCompleted = true;
    }

    // Getter方法:让外部能读取任务属性
    public String getContent() {
        return content;
    }

    public boolean isCompleted() {
        return isCompleted;
    }

    public LocalDateTime getCreateTime() {
        return createTime;
    }

    // 重写toString,打印任务时能直接看到状态和内容
    @Override
    public String toString() {
        String status = isCompleted ? "[已完成]" : "[未完成]";
        return status + " " + content + " (创建于:" + createTime + ")";
    }
}

2. 定义TodoList类管理所有任务

把任务的增删改查逻辑都放到这个类里,相当于一个“任务管理器”,和用户交互的代码分开,结构更清晰:

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

public class TodoList {
    private List<TodoItem> items;

    public TodoList() {
        items = new ArrayList<>();
    }

    // 添加新任务
    public void addTask(String content) {
        items.add(new TodoItem(content));
        System.out.println("任务已添加:" + content);
    }

    // 标记指定索引的任务为完成
    public void markTaskCompleted(int index) {
        if (index >= 0 && index < items.size()) {
            items.get(index).markAsCompleted();
            System.out.println("已标记完成:" + items.get(index).getContent());
        } else {
            System.out.println("无效的任务编号!");
        }
    }

    // 展示所有任务
    public void showAllTasks() {
        if (items.isEmpty()) {
            System.out.println("当前没有待办任务~");
            return;
        }
        System.out.println("=== 待办任务列表 ===");
        for (int i = 0; i < items.size(); i++) {
            System.out.println((i + 1) + ". " + items.get(i));
        }
    }

    // 删除指定索引的任务
    public void deleteTask(int index) {
        if (index >= 0 && index < items.size()) {
            TodoItem removed = items.remove(index);
            System.out.println("已删除任务:" + removed.getContent());
        } else {
            System.out.println("无效的任务编号!");
        }
    }
}

3. 主程序入口(用户交互逻辑)

把和用户交互的部分单独写在主类里,和业务逻辑分离,以后想改成GUI界面或者命令行交互都很方便:

import java.util.Scanner;

public class TodoApp {
    public static void main(String[] args) {
        TodoList todoList = new TodoList();
        Scanner scanner = new Scanner(System.in);
        boolean isRunning = true;

        System.out.println("=== 欢迎使用待办事项管理器 ===");
        while (isRunning) {
            System.out.println("\n请选择操作:");
            System.out.println("1. 添加任务");
            System.out.println("2. 标记任务完成");
            System.out.println("3. 查看所有任务");
            System.out.println("4. 删除任务");
            System.out.println("5. 退出");
            System.out.print("输入选项编号:");

            int choice = scanner.nextInt();
            scanner.nextLine(); // 吃掉换行符,避免影响后续输入

            switch (choice) {
                case 1:
                    System.out.print("请输入任务内容:");
                    String content = scanner.nextLine();
                    todoList.addTask(content);
                    break;
                case 2:
                    System.out.print("请输入要标记完成的任务编号:");
                    int completeIndex = scanner.nextInt() - 1; // 转成0-based索引
                    todoList.markTaskCompleted(completeIndex);
                    break;
                case 3:
                    todoList.showAllTasks();
                    break;
                case 4:
                    System.out.print("请输入要删除的任务编号:");
                    int deleteIndex = scanner.nextInt() - 1;
                    todoList.deleteTask(deleteIndex);
                    break;
                case 5:
                    isRunning = false;
                    System.out.println("感谢使用,再见!");
                    break;
                default:
                    System.out.println("无效选项,请重新输入!");
            }
        }
        scanner.close();
    }
}

三、后续扩展的方向

有了这个基础框架,以后加新功能几乎不用改现有代码,直接扩展就行:

  • 任务分类:给TodoItem加category属性,在TodoList里加按分类筛选的方法
  • 截止时间提醒:给TodoItem加deadline属性,定时检查即将到期的任务
  • 数据持久化:把任务列表保存到本地JSON文件或数据库,重启程序不丢失数据
  • 优先级设置:给任务加高/中/低优先级,展示时按优先级排序
  • 搜索功能:根据关键词搜索特定任务

这种设计遵循了单一职责原则,每个类只干自己的事,后续维护和扩展都非常轻松~

内容的提问来源于stack exchange,提问作者Angelbreath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:42:03