package j2.lesson03;
/**
* 課題1604 - 解答例.
* 0から100までの値を格納できる整数の集合を表すクラス.
* @author arakawa
* @version $Id: IntegerSet_java.rps,v 1.1 2006/03/06 12:56:15 java2005 Exp $
*/
public class IntegerSet {
/** 最大要素数. */
public static final int SIZE = 101;
/** 内部表現. */
private boolean[] set;
/**
* 0から100までの値を格納できる整数の集合を作成する。
*/
public IntegerSet() {
this.set = new boolean[SIZE];
}
/**
* この集合に値を追加する。
* すでに指定した値が存在する場合は何もしない。
* @param n 追加する値
*/
public void add(int n) {
this.set[n] = true;
}
/**
* この集合から値を取り除く。
* 指定した値が存在しない場合は何もしない。
* @param n 取り除く値
*/
public void remove(int n) {
this.set[n] = false;
}
/**
* この集合に指定した値が存在するかどうか調べる。
* @param n 調べる値
* @return 存在すれば <code>true</code>, しなければ <code>false</code>
*/
public boolean contains(int n) {
return this.set[n];
}
/**
* この集合に格納されている値の個数を返す。
* @return |this|
*/
public int size() {
int count = 0;
for (int i = 0; i < this.set.length; i++) {
if (this.set[i]) {
count++;
}
}
return count;
}
/**
* この集合と引数に与えられた集合の和集合を新しく作成する。
* この操作によってもとの集合に副作用はない。
* @param other 和をとる集合
* @return 新しい和集合
*/
public IntegerSet union(IntegerSet other) {
IntegerSet union = new IntegerSet();
for (int i = 0; i < SIZE; i++) {
if (this.set[i] || other.set[i]) {
union.set[i] = true;
}
}
return union;
}
/**
* この集合と引数に与えられた集合の積集合を新しく作成する。
* この操作によってもとの集合に副作用はない。
* @param other 積をとる集合
* @return 新しい積集合
*/
public IntegerSet intersection(IntegerSet other) {
IntegerSet intersection = new IntegerSet();
for (int i = 0; i < SIZE; i++) {
if (this.set[i] && other.set[i]) {
intersection.set[i] = true;
}
}
return intersection;
}
/**
* この集合を整数型の配列に変換して返す。
* この集合に含まれる値が返される配列に昇順に格納される。
* 返される配列の長さは <code>this.size()</code> に等しい。
* @return この集合を整数型の配列で表したもの
* @see #size()
*/
public int[] toIntArray() {
int[] array = new int[size()];
int index = 0;
for (int i = 0; i < this.set.length; i++) {
if (this.set[i]) {
array[index++] = i;
}
}
return array;
}
/**
* テストプログラム。自由に作成してよい。
* @param args 無視される
*/
public static void main(String[] args) {
// 自由に作成してよい
}
}
|