簡體   English   中英

在Java中對對象進行的更改

[英]Changes being made to an object in Java

我創建了一個復合類,它包含碳,氫,氧,氮的數量和它的鍵數。 我有一個包含這些對象的堆棧。

最初堆棧將從空開始,我會彈出它。 然后我將對它應用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);
    }

您的問題不是很清楚,但您可能希望考慮的一個選項是使您的對象不可變 - 因此您永遠不能更改單個對象中的值,但您可以改為使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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM