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
相关产品推荐
相关产品推荐

