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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 15:54:04