0

我创建了一个 Compound 类,其中包含碳、氢、氧、氮的数量及其键数。我有一个包含这些对象的堆栈。

最初堆栈将从空开始,我将弹出它。然后我将对其应用 addHydrogen 函数,因此它的氢将 = 1,氧 = 0,氮 = 0 和碳 = 0。

然后我想取同一个对象并应用 addCarbon 函数,这样 Hydogren 将 = 0、Oxygen = 0、Nitrogren = 0 和 Carbon = 1。

如何编写我的程序,以便我可以使用相同的对象,但不能使用添加氢所做的更改?我知道我最初可以使用一些 if 案例,但我认为它不会起作用,因为我最终会从氢 = 2、氧 = 2、氮 = 0、碳 = 1 的化合物开始。

*我没有在代码中包含我的构造函数,它们只是将所有内容初始化为 0。

class compound {

    int Hydrogen;
    int Carbon;
    int Nitrogen;
    int Oxygen;
    int bond;

    public void addHydrogen(compound comp) {
        Hydrogen++;
    }

    public void addCarbon(compound comp) {
        Carbon++;
    }

}
    public static void main(String[] args) {
        Compound a= new Compound();
        a.addHydrogen(a);
        a.addCarbon(a);
    }
4

1 回答 1

2

您的问题不是很清楚,但您可能希望考虑的一个选项是使您的对象不可变- 因此您永远不能更改单个对象中的值,但您可以让您的addCarbon(etc) 方法返回一个新对象具有适当的新值。

(请注意,目前您没有使用您的参数,无论如何这似乎都有错误的情况......)

示例代码:

public class Compound {
    private final int hydrogen;
    private final int carbon;
    private final int nitrogen;
    private final int oxygen;

    public Compound(int hydrogen, int carbon, int nitrogen, int oxygen) {
        this.hydrogen = hydrogen;
        this.carbon = hydrogen;
        this.nitrogen = nitrogen;
        this.oxygen = oxygen;
    }

    public int getHydrogen() {
        return hydrogen;
    }

    // ... etc for the other getters

    public Compound plusHydrogen() {
        return new Compound(hydrogen + 1, carbon, nitrogen, oxygen);
    }

    // etc for the other plus calls
}

请注意,我已经调用了方法plusHydrogen等,以明确它们不会改变现有对象,而是返回一个新对象。

然后你可以拥有:

Compound base = new Compound(0, 0, 0, 0);
Compound withHydrogen = base.plusHydrogen();
Compound withCarbon = base.plusCarbon();
// whatever
于 2012-11-17T23:13:16.340 回答