Java开发待办事项列表:新手开发者寻求正确实现思路
嘿,作为编程新手能想到提前规划扩展功能真的超棒!先帮你把现有代码里的小语法坑填上,然后咱们聊聊怎么搭一个能轻松加新功能的框架~
一、先修复现有代码的语法问题
你的代码里有两处小错误,先修正一下才能正常运行:
main方法的参数括号写错了,应该是public static void main(String[] args)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
相关产品推荐
相关产品推荐

