我正在创建一个程序,该程序可以创建和修改整数集

这是我的代码:

public class IntSet{
    private final int MAXALLOWEDSETVALUE=2000;
    private boolean [] data = new boolean[MAXALLOWEDSETVALUE+1];

    public IntSet(int... elts) {
        for(int iteration = 0; iteration < elts.length; iteration++) {
            if(elts[iteration] <= MAXALLOWEDSETVALUE)
            data[elts[iteration]] = true;
        }
    }

    public IntSet(IntSet source){
        System.arraycopy(source.data, 0, this.data, 0, MAXALLOWEDSETVALUE);
    }
    public void setTo(IntSet source){
        System.arraycopy(source.data, 0, this.data, 0, MAXALLOWEDSETVALUE);
    }
    public void insertElement(int element){
        data[element] = true;
    }
    public void deleteElement(int element){
        data[element] = false;
}
    public boolean hasElement(int element){
        if(data[element] == true)
            return true;
        else
            return false;
    }

    public boolean equals(IntSet other){
        for(int iteration = 0; iteration < MAXALLOWEDSETVALUE; iteration++) {
            if(data[iteration] == other.data[iteration]) {

            } else {
                return false;
            }
        }
        return true;
    }

    public String toString() {
        String output = "{";
        for(int iteration = 0; iteration < MAXALLOWEDSETVALUE; iteration++) {
            if(data[iteration] == true)
                output += (iteration + ", ");
        }
        output += "}";
        return output;
    }


我正在为我的减法函数苦苦挣扎:减法函数形成一个新集合,该集合等于第一个集合,但第二个集合中的所有元素都被删除了。我知道我需要返回一个对象,但是我不确定该怎么做。任何帮助表示赞赏。

    public IntSet subtract(IntSet other) {
        for(int iteration = 0; iteration < MAXALLOWEDSETVALUE; iteration++) {
            if(data[iteration] == true && other.data[iteration] == true) {
                other.data[iteration] = false;
            }
            if(data[iteration] == true && other.data[iteration] == false) {
                other.data[iteration] = true;
            }
        }
        System.arraycopy(other.data, 0, this.data, 0, MAXALLOWEDSETVALUE);
    }
    public int getUpperLimit(){
        return MAXALLOWEDSETVALUE;
    }

}

最佳答案

您的减法可以这样实现:


创建当前对象的副本。称为newSet
如果other set包含一个元素,则将该newSet元素设置为false,这实际上是将该元素从newSet中“删除”。
返回newSet


代码如下:



public IntSet subtract(IntSet other) {
    IntSet newSet = new IntSet (this);
    for(int iteration = 0; iteration < MAXALLOWEDSETVALUE; iteration++) {
        if(other.data[iteration]) {
            newSet.data[iteration] = false;
        }
    }
    return newSet;
}




希望这可以帮助!

09-10 08:28