我创建了一个复合类,它包含碳,氢,氧,氮的数量和它的键数。我有一个包含这些对象的堆栈。
最初堆栈将从空开始,我将弹出它。然后我将对它应用addHydrogen函数,因此它的氢气将= 1,氧气= 0,氮气= 0且碳= 0。
然后我想采用相同的对象并应用addCarbon函数,以便Hydogren将= 0,Oxygen = 0,Nitrogren = 0和Carbon = 1。
如何编写我的程序,以便我可以使用相同的对象,但不能使用添加Hydrogen所做的更改?我知道我最初可以使用一些案例,但我不认为它会起作用,因为我最终会开始使用氢= 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);
}
答案 0 :(得分:2)
您的问题不是很明确,但您可能希望考虑的一个选项是使您的对象不可变 - 因此您永远无法更改单个对象中的值,但您可以改为使您的addCarbon
(等)方法返回一个具有适当新值的新对象。
(请注意,目前您没有使用您的参数,无论如何看起来都有错误的情况......)
示例代码:
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