我试图写一些成员方法:
按如下方式创建类IntegerSet:类IntegerSet的每个对象可以保存0到100范围内的整数。一个集合在内部表示为1和0的数组。如果整数i在集合中,则数组元素a [i]为1。如果整数j不在集合中,则数组元素a [j]为0。例如,整数集{1,3,4,8,9}将在内部表示为:
{1, 3, 4, 8, 9} = {0,1,0,1,1,0,0,0,0,1,1}
public IntegerSet intersection(IntegerSet)返回set,它是参数与此集合的集合理论交集,即
A ∩ B = { x | x ∈ A ∧ x ∈ B}
public IntegerSet difference(IntegerSet)返回set,它是参数和此集合的集合理论差异,即
A - B = {x | x∈A∧x∉B}
例如,如果A = {1,2,3}且B = {3,4,5}则A-B = {1,2}且B-A为{4,5}。 public boolean equals(IntegerSet)如果此set和参数集相同则返回true,否则返回false。
有人可以向我解释如何做到这一点。
我已经有一个联合集成员方法..这不能使用hashset bitset或任何高级的东西,因为我们还没有学到它们:..(
我已经完成了,但差异和相同的方法无法正常工作
到目前为止,这是我的代码......
class IntegerSet{
private int [] a = new int [100];
public IntegerSet(){
a = new int[100];
}
public void insert(int b){
a[b] = 1;
}
public void delete(int c){
a[c] = 0;
}
public String toString(){
StringBuffer sb = new StringBuffer();
for(int i = 0; i < a.length; i++)
if(a[i] == 1)
sb.append(i + " ");
return sb.toString();
}
public IntegerSet union (IntegerSet d){
IntegerSet s = new IntegerSet();
for(int i = 0; i < a.length; i++)
if(a[i] == 1|| d.a[i] == 1)
s.insert(i);
return s;
}
public IntegerSet intersection(IntegerSet t){
IntegerSet s = new IntegerSet();
for(int i = 0; i < a.length; i++){
if(a[i] == 1 && t.a[i] == 1)
s.insert(i);
}
return s;
}
public IntegerSet difference(IntegerSet p){
IntegerSet s = new IntegerSet();
for(int i = 0; i < a.length; i++){
if(a[i] == 1 && p.a[i] == 0)
s.insert(i);
}
return s;
}
public boolean equals(IntegerSet l){
boolean b = false;
for(int i = 0; i < a.length; i++)
if(a[i] == l.a[i]) {
b = true; }
return b;
}
}
class Assignment1{
public static void main(String [] args){
IntegerSet n1 = new IntegerSet();
n1.insert(7);
n1.insert(8);
n1.insert(3);
n1.insert(1);
n1.insert(4);
System.out.println("Integer Set: " +n1);
IntegerSet n2 = new IntegerSet();
n2.insert(3);
n2.insert(8);
n2.insert(2);
n2.insert(5);
n2.insert(9);
System.out.println("Integer Set: " + n2);
n1.delete(7);
n2.delete(2);
System.out.println("Integer Set: " + n1);
System.out.println("Integer Set: " +n2);
IntegerSet u = n1.union(n2);
System.out.println("Union: " + u);
IntegerSet i = n1.intersection(n2);
System.out.println("Intersection: " + i);
IntegerSet d = n1.difference(n2);
System.out.println("Difference: " + d);
if (n1.equals(n2));
System.out.println(n1 + "is equal to " + n2);
}
}
答案 0 :(得分:1)
返回具有内部数组*a'*, where *a'* = *a* intersect *b* such that *a'*[i] = 1 iff *a*[i] == 1 AND *b*[i] == 1.
答案 1 :(得分:0)
循环遍历数组并检查两者是否都设置为1。
HashSet set = new HashSet();
for(int i = 0; i < Math.min(a.length, b.length); ++i)
if(a[i] && b[i] == 1)//check if both are one
set.add(i + 1);
return set;
使用bitset
BitSet set = new BitSet();
for(int i = 0; i < Math.min(a.length, b.length); ++i)
if(a[i] && b[i] == 1)//check if both are one
set.flip(i);
return set;
如果你想用setter和getter创建自己的类:
public static class MySet
{
int []arr;
MySet(int n)
{
arr = new arr[n];
}
public void flip(i)
{
arr[i] = arr[i] == 1 ? 0 : 1;
}
public void get(i)
{
return arr[i];
}
}
然后在Main类中使用此类。
public static void main(String[] arg)
{
int a = {};
int b = {};
MySet s = new MySet(Math.min(a.length, b.length));
for(int i = 0; i < Math.min(a.length, b.length); ++i)
if(a[i] && b[i] == 1)
s.flip(i);
for(int i = 0; i < Math.min(a.length, b.length); ++i)
if(s.get(i))
System.out.println(i + 1);
}
答案 2 :(得分:0)
您不需要创建新类。 Java已经通过BitSet类提供了这个功能。
位集:http://docs.oracle.com/javase/7/docs/api/java/util/BitSet.html
您基本上是在尝试创建一个Bitset [由您的整数集表示],然后BitSet类提供您可以使用的AND / OR / XOR操作。