如何实现列表组的增删改操作?求营地管理程序实现思路验证
嘿,你的核心思路方向完全正确!用ArrayList来管理小屋/营员的集合、创建Camper类封装营员的姓名、年龄、性别这些属性,这完全贴合面向对象的设计逻辑,这个方案是可行的。接下来我帮你把具体的增删改操作落地,同时完善整个程序的结构:
一、先搞定核心实体类
1. Camper类(封装营员信息)
首先咱们把营员的属性和基础操作封装起来,这样后续管理起来更清晰:
public class Camper { private String name; private int age; private String gender; // 构造方法 public Camper(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } // Getter和Setter(用于编辑属性) public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } // 重写toString方便打印查看 @Override public String toString() { return "营员:" + name + ",年龄:" + age + ",性别:" + gender; } }
2. Cabin类(封装小屋及营员列表)
小屋本身需要有自己的标识(比如名称),还要管理属于它的营员集合,所以咱们在Cabin类里内置一个ArrayList<Camper>来存储营员,同时添加营员的增删改方法:
import java.util.ArrayList; import java.util.Iterator; public class Cabin { private String cabinName; private ArrayList<Camper> campers; // 构造方法,初始化空的营员列表 public Cabin(String cabinName) { this.cabinName = cabinName; this.campers = new ArrayList<>(); } // Getter和Setter(用于编辑小屋名称) public String getCabinName() { return cabinName; } public void setCabinName(String cabinName) { this.cabinName = cabinName; } public ArrayList<Camper> getCampers() { return campers; } // 添加营员到小屋 public void addCamper(Camper camper) { campers.add(camper); System.out.println(camper.getName() + "已成功加入" + cabinName); } // 删除小屋中的某个营员(按姓名) public boolean removeCamper(String camperName) { Iterator<Camper> iterator = campers.iterator(); while (iterator.hasNext()) { Camper camper = iterator.next(); if (camper.getName().equals(camperName)) { iterator.remove(); System.out.println(camperName + "已从" + cabinName + "移除"); return true; } } System.out.println("未找到名为" + camperName + "的营员"); return false; } // 编辑小屋中某个营员的信息 public boolean editCamper(String oldName, String newName, int newAge, String newGender) { for (Camper camper : campers) { if (camper.getName().equals(oldName)) { camper.setName(newName); camper.setAge(newAge); camper.setGender(newGender); System.out.println("营员信息已更新"); return true; } } System.out.println("未找到名为" + oldName + "的营员"); return false; } // 重写toString,方便查看小屋及营员信息 @Override public String toString() { StringBuilder sb = new StringBuilder("小屋:" + cabinName + "\n"); sb.append("营员列表:\n"); for (Camper camper : campers) { sb.append("- ").append(camper).append("\n"); } return sb.toString(); } }
二、创建管理类来统筹所有操作
接下来咱们做一个CampManager类,用来管理所有小屋的集合,实现小屋的增删改,以及营员的分配逻辑:
import java.util.ArrayList; import java.util.Iterator; public class CampManager { private ArrayList<Cabin> cabins; public CampManager() { cabins = new ArrayList<>(); } // 添加新小屋 public void addCabin(String cabinName) { cabins.add(new Cabin(cabinName)); System.out.println("小屋" + cabinName + "已创建"); } // 删除指定小屋 public boolean removeCabin(String cabinName) { Iterator<Cabin> iterator = cabins.iterator(); while (iterator.hasNext()) { Cabin cabin = iterator.next(); if (cabin.getCabinName().equals(cabinName)) { iterator.remove(); System.out.println("小屋" + cabinName + "已删除"); return true; } } System.out.println("未找到名为" + cabinName + "的小屋"); return false; } // 编辑小屋名称 public boolean editCabinName(String oldName, String newName) { for (Cabin cabin : cabins) { if (cabin.getCabinName().equals(oldName)) { cabin.setCabinName(newName); System.out.println("小屋名称已更新为" + newName); return true; } } System.out.println("未找到名为" + oldName + "的小屋"); return false; } // 查找指定小屋(用于分配营员) public Cabin findCabin(String cabinName) { for (Cabin cabin : cabins) { if (cabin.getCabinName().equals(cabinName)) { return cabin; } } return null; } // 查看所有小屋及营员信息 public void showAllCabins() { if (cabins.isEmpty()) { System.out.println("暂无任何小屋"); return; } for (Cabin cabin : cabins) { System.out.println(cabin); } } }
三、用户交互示例(控制台版)
最后咱们写一个主类,通过控制台和用户交互,把所有功能串起来:
import java.util.Scanner; public class CampApp { public static void main(String[] args) { CampManager manager = new CampManager(); Scanner scanner = new Scanner(System.in); boolean running = true; while (running) { 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.println("6. 修改营员信息"); System.out.println("7. 查看所有小屋及营员"); System.out.println("8. 退出"); System.out.print("请选择操作:"); int choice = scanner.nextInt(); scanner.nextLine(); // 清除换行符 switch (choice) { case 1: System.out.print("请输入小屋名称:"); String cabinName = scanner.nextLine(); manager.addCabin(cabinName); break; case 2: System.out.print("请输入要删除的小屋名称:"); String delCabinName = scanner.nextLine(); manager.removeCabin(delCabinName); break; case 3: System.out.print("请输入原小屋名称:"); String oldCabinName = scanner.nextLine(); System.out.print("请输入新小屋名称:"); String newCabinName = scanner.nextLine(); manager.editCabinName(oldCabinName, newCabinName); break; case 4: System.out.print("请输入营员姓名:"); String camperName = scanner.nextLine(); System.out.print("请输入营员年龄:"); int age = scanner.nextInt(); scanner.nextLine(); System.out.print("请输入营员性别:"); String gender = scanner.nextLine(); System.out.print("请输入要分配的小屋名称:"); String targetCabin = scanner.nextLine(); Cabin cabin = manager.findCabin(targetCabin); if (cabin != null) { cabin.addCamper(new Camper(camperName, age, gender)); } else { System.out.println("未找到指定小屋"); } break; case 5: System.out.print("请输入小屋名称:"); String cabinToRemove = scanner.nextLine(); Cabin target = manager.findCabin(cabinToRemove); if (target != null) { System.out.print("请输入要删除的营员姓名:"); String delCamper = scanner.nextLine(); target.removeCamper(delCamper); } else { System.out.println("未找到指定小屋"); } break; case 6: System.out.print("请输入小屋名称:"); String cabinToEdit = scanner.nextLine(); Cabin editTarget = manager.findCabin(cabinToEdit); if (editTarget != null) { System.out.print("请输入要修改的营员原姓名:"); String oldCamperName = scanner.nextLine(); System.out.print("请输入新姓名:"); String newCamperName = scanner.nextLine(); System.out.print("请输入新年龄:"); int newAge = scanner.nextInt(); scanner.nextLine(); System.out.print("请输入新性别:"); String newGender = scanner.nextLine(); editTarget.editCamper(oldCamperName, newCamperName, newAge, newGender); } else { System.out.println("未找到指定小屋"); } break; case 7: manager.showAllCabins(); break; case 8: running = false; System.out.println("系统已退出"); break; default: System.out.println("无效的选择,请重新输入"); } } scanner.close(); } }
最后再确认你的思路
你最开始想的:用ArrayList管理集合、创建Camper类封装属性、通过方法实现增删改,这些都是非常正确的设计思路,完全可行。上面的代码就是把你的思路具象化了——通过类的封装把数据和操作绑定,用管理类统筹全局,再通过交互层让用户操作。如果后续要扩展功能(比如营员的排序、小屋的人数限制),也可以很方便地在对应的类里添加方法。
内容的提问来源于stack exchange,提问作者Nathan777
相关产品推荐
相关产品推荐

