【发布时间】:2013-05-10 17:59:00
【问题描述】:
嘿,我想知道是否有人可以进一步解释这一点。这不是一项任务,它只是我的一个测试的解决方案。我一直在努力理解它,但我不确定..
基本上给出答案的问题是:
[i]在 Java 中编写一个名为 RangeSet 的类,它使用布尔数组的数据结构来表示一组整数,使用 3 种方法: [列表] []add - 如果项目已经是集合的成员,则添加项目但保持集合不变 []remove - 如果项目不是集合的成员,则移除项目但保持集合不变 [*]contains - 返回一个布尔值,表示一个项目是否是集合的成员 [/列表]
该类应该有一个构造函数,它接受一个整数 n 并给出一个表示一组的对象,该集合可以包含 1 到 n 范围内的整数。构造函数应该给出一个空集。该集合应该是破坏性的。如果集合被操作更改,则方法应返回 true,否则返回 false。[/i]
基本上,这里是一组限制在 1 到 n 范围内的整数,由布尔数组实现 add 和 remove 方法返回一个布尔值,表示集合是否已被调用更改,假设方法 add、remove 和 contains 的所有参数都在 1 到 n 范围内,因此没有特殊代码来处理参数不在范围内的情况。
class RangeSet
{
private boolean[] arr;
public RangeSet(int n)
{
arr = new boolean[n];
}
public boolean add(int n)
{
if(arr[n-1]) return false;
arr[n-1]=true;
return true;
}
public boolean remove(int n)
{
if(!arr[n-1]) return false;
arr[n-1]=false;
return true;
}
public boolean contains(int n)
{
return arr[n-1];
}
}
所以我想知道,为什么 arr = new boolean[n] 和 add(int n) 都由 'n' 表示?并且解决方案不是检查新输入的整数的位置而不是检查实际值吗? 谢谢。
【问题讨论】:
-
好吧,如果这就是您的意思,代码缺少边界检查。
n的“超出范围”值将导致隐式 ArrayIndexOutOfBoundsException,这可能没问题,但被某些人认为是不良形式。否则,我不太明白你在问什么。