Java Attraction类景点存储数组及5个上限功能实现问题
问题排查与修正方案
常见校验失效原因
- 数组长度判断逻辑错误:不要用
attractions.length作为当前已存储元素数量,int数组初始化后length固定为5,和实际存入元素数量无关,需要单独声明计数器变量记录已存入的景点数量 - 计数器变量作用域错误:如果计数器定义在
a选项的触发方法内部,每次调用都会重置为0,无法累计计数,需要把计数器定义为类的成员变量 - 实例重复创建:如果每次触发
a选项都新建Attraction对象,数组和计数器都会重置,永远触发不了满额提示,需要全局复用同一个Attraction实例
修正后代码示例
Attraction类实现
public class Attraction { // 最大存储容量常量 private static final int MAX_SIZE = 5; // 存储景点的数组 private int[] attractions = new int[MAX_SIZE]; // 已存储景点数量计数器 private int currentCount = 0; // 新增景点方法,返回false表示新增失败(已满) public boolean addAttraction(int attractionId) { // 满额校验 if (currentCount >= MAX_SIZE) { return false; } attractions[currentCount] = attractionId; currentCount++; return true; } // 按需添加getter方法 public int[] getAttractions() { return attractions; } public int getCurrentCount() { return currentCount; } }
菜单触发逻辑
// 全局声明唯一的Attraction实例,不要放到a选项的分支内部 Attraction attractionInstance = new Attraction(); // 菜单选择分支逻辑 if (userInput.equals("a")) { // 调用StageA的createAttraction生成景点id int newAttractionId = StageA.createAttraction(); boolean addSuccess = attractionInstance.addAttraction(newAttractionId); if (!addSuccess) { System.out.println("已满,无法继续新增"); } else { System.out.println("景点新增成功"); } }
如果需要存储景点的更多信息而非仅id,把int[] attractions替换为对应自定义类的数组即可,校验逻辑不需要改动。
内容的提问来源于stack exchange,提问作者Kevin Brown
相关产品推荐
相关产品推荐

