【问题标题】:Java returning objectJava 返回对象
【发布时间】:2017-07-31 02:50:40
【问题描述】:

我正在创建一个创建和修改整数集的程序

这是我的代码:

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;
    }

}

【问题讨论】:

  • 欢迎来到 Stack Overflow!看起来你可能正在寻求家庭作业帮助。虽然我们对此本身没有任何问题,但请注意这些dos and don'ts,并相应地编辑您的问题。 (即使这不是家庭作业,也请考虑建议。)
  • 谢谢!我个人仍然相信我没有违反任何规则或任何事情。不过谢谢你的建议!
  • 您是否要存储一组整数?如果是这样,您打算将其存储在哪里?您正在使用boolean 的数组。为什么?
  • 没关系,我理解你的逻辑,但我不明白原因..但它非常“不同”..
  • 所以你必须创建你的集合的副本(你已经有一个构造函数来做到这一点),然后从这个副本中删除第二个集合的每个元素(你还有一个方法来删除一个集合中的元素)。

标签: java arrays object return


【解决方案1】:

你的减法可以这样实现:

  1. 创建当前对象的副本。打电话给newSet
  2. 如果other 集合包含一个元素,则将该newSet 元素设置为false,这实际上是从newSet 中“删除”该元素。
  3. 返回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;
}

希望这会有所帮助!

【讨论】:

  • 很酷,所以我可以在该函数中创建另一个对象?太棒了
  • @T.Dog 是的。您还可以对您所在的同一对象进行更改,并以return this 结束。
  • 循环体可以缩减为if (other.data[iteration]) { newSet.data[iteration] = false; }
  • @JBNizet,根据您的评论更新了答案。谢谢!
猜你喜欢
  • 2020-02-17
  • 2017-06-19
  • 2014-05-27
  • 2020-11-20
  • 2019-07-07
  • 1970-01-01
  • 1970-01-01
  • 2015-01-23
  • 2017-02-24
相关资源
最近更新 更多