明解 Javaによるアルゴリズムとデータ構造 7-1_集合とは
7-1_集合とは
部分集合と真部分集合
真部分集合 proper subset
- 集合 A のすべての要素が集合Bの要素であって、集合AとBが等しくない
その他気付き
実行時には,左辺オペランド式を最初に評価する。その値がtrueならば,条件ORの値をtrueとし,右辺オペランド式は評価しない。左辺オペランドの値がfalseならば,右辺オペランド式を評価し,その値を条件OR式の値とする。この方法で,||はbooleanオペランド上で|と同じ結果を計算する。右辺オペランド式を常にではなくむしろ条件的に評価するという点だけが異なるものとする。
- 作ったメソッドがまさにこれに該当し、|| 演算子以降のaddメソッドが実行されていなかった
テスト対象メソッド
package algorithm.ch07; public class IntSet { private int max; private int num; private int[] set; public IntSet(int capacity) { num = 0; max = capacity; try { set = new int[max]; } catch (OutOfMemoryError e) { max = 0; } } public boolean add(int n) { if (num >= max || contains(n) == true) { return false; } else { set[num++] = n; return true; } } public boolean add(IntSet s) { boolean changeFlg = false; for (int e: s.set) { changeFlg = changeFlg || add(e); } return changeFlg; } }
テストクラス
package algorithm.ch07; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; import org.junit.Before; import org.junit.Test; import org.junit.experimental.runners.Enclosed; import org.junit.runner.RunWith; @RunWith(Enclosed.class) public class IntSetTest { public static class 操作対象の集合が空の場合 { IntSet sut; IntSet s; @Before public void setUp(){ sut = new IntSet(10); s = new IntSet(10); s.add(10); s.add(15); s.add(20); } @Test public void 別の集合をaddすると和集合が得られること() { sut.add(s); String actual = sut.toString(); String expected = s.toString(); assertThat(actual, is(expected)); } @Test public void addした際に元の集合から変化があるとtrueを返すこと() { boolean actual = sut.add(s); boolean expected = true; assertThat(actual, is(expected)); } } }
修正メソッド
public boolean add(IntSet s) { boolean changeFlg = false; for (int i = 0; i < s.num; i++) { changeFlg = add(s.set[i]) || changeFlg; } return changeFlg; }
- 2点修正。

- 作者: 柴田望洋
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2007/11/07
- メディア: 単行本
- 購入: 5人 クリック: 42回
- この商品を含むブログ (19件) を見る

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)
- 作者: 渡辺修司
- 出版社/メーカー: 技術評論社
- 発売日: 2012/11/21
- メディア: 単行本(ソフトカバー)
- 購入: 14人 クリック: 273回
- この商品を含むブログ (65件) を見る