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

Java IntSetImpl类toString方法输出布尔值而非数值问题求助

问题根源

  • 遍历逻辑错误:你当前遍历的终止条件是i < size,size是集合存储的元素总数,不是底层数组的下标最大值,完全没有遍历所有下标判断元素是否存在
  • 输出内容错误:你直接输出了a[i]的布尔值,而非值为true对应的下标(也就是实际存储的整数值)
  • 隐藏bug:remove方法逻辑写反,只有元素存在(a[n] == true)时才需要执行移除操作,当前逻辑会导致size计数错误,且无法删除已存在的元素。

修复代码

1. 修复remove方法

@Override
public void remove(int n) {
    validate(n);
    // 仅当元素存在时执行移除
    if (a[n]) {
        a[n] = false;
        size--;
    }  
}

2. 修复toString方法

@Override
public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("{");
    // 标记是否已添加过元素,处理逗号分隔逻辑
    boolean hasElement = false;
    // 遍历底层数组的所有下标
    for (int i = 0; i < a.length; i++) {
        if (a[i]) {
            if (hasElement) {
                sb.append(", ");
            }
            // 输出值为true对应的下标,即实际存储的整数值
            sb.append(i);
            hasElement = true;
        }
    }
    sb.append("}");
    return sb.toString();
}

修复后效果

按照你提供的测试代码运行,输出如下:

{2, 4, 5}
{2, 4}

后续的contains方法你尚未实现,运行到对应代码会抛出UnsupportedOperationException,自行补全该方法逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:06:08