2013-07-24 15 views
6

我期望下面的代码会给我一个子集和一个补充集。Set.contains()如何决定它是否是子集?

但实际上,结果显示“错误:这不是子集!”

什么it.next()得到以及如何修改我的代码以获得我想要的结果? 谢谢!

package Chapter8; 

import java.util.HashSet; 
import java.util.Iterator; 
import java.util.Set; 

public class Three { 
    int n; 
    Set<Integer> set = new HashSet<Integer>(); 

    public static void main(String args[]) { 
     Three three = new Three(10); 
     three.display(three.set); 
     Set<Integer> test = new HashSet<Integer>(); 
     Iterator<Integer> it = three.set.iterator(); 
     while(it.hasNext()) { 
      test.add(it.next()); 
      three.display(test); 
      three.display(three.complementarySet(test)); 
     } 

    } 

    boolean contains(Set<Integer> s) { 
     if (this.set.contains(s)) 
      return true; 
     else 
      return false; 
    } 

    Set<Integer> complementarySet(Set<Integer> s) { 
     if(this.set.contains(s)){ 
      Set<Integer> result = this.set; 
      result.removeAll(s); 
      return result; 
     } 
     else { 
      System.out.println("Error: This is not a subset!"); 
      return null; 
     } 
    } 

    Three() { 
     this.n = 3; 
     this.randomSet(); 
    } 

    Three(int n) { 
     this.n = n; 
     this.randomSet(); 
    } 

    void randomSet() { 
     while(set.size() < n) { 
      set.add((int)(Math.random()*10)); 
     } 
    } 

    void display(Set<Integer> s) { 
     System.out.println("The set is " + s.toString()); 
    } 
} 
+0

您需要在使用Set之前知道Set api。请涵盖我的教程[HashSet的内部生活](http://volodial.blogspot.com/2013/07/internal-life-of-hashset-in-java.html) –

+0

@VolodymyrLevytskyi您的链接已损坏,是文章其他地方仍然可用 – Noumenon

回答

2

你的问题是,在这一部分:

set.contains(s) 

不会做你认为是这样,它没有考虑作为一个参数另一个Set,看看它的成员都包含在第一个set。它看起来是否通过它的参数在Set中。

您需要迭代“包含”集合,并对包含集合中的每个元素使用set.contains(element)

相关问题