解答例 - j2.lesson03.IntegerSet

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[ntrue;
    }
    
    /**
     * この集合から値を取り除く。
     * 指定した値が存在しない場合は何もしない。
     @param n 取り除く値
     */
    public void remove(int n) {
        this.set[nfalse;
    }
    
    /**
     * この集合に指定した値が存在するかどうか調べる。
     @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[itrue;
            }
        }
        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[itrue;
            }
        }
        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) {
        // 自由に作成してよい
    }
}