0

炭素、水素、酸素、窒素の数とその結合数を保持する化合物クラスを作成しました。これらのオブジェクトを保持するスタックがあります。

最初、スタックは空から始まり、それをポップします。次に、addHydrogen関数を適用して、水素が1、酸素= 0、窒素= 0、炭素=0になるようにします。

次に、同じオブジェクトを取得してaddCarbon関数を適用し、Hydogrenが0、Oxygen = 0、Nitrogren = 0、Carbon=1になるようにします。

同じオブジェクトを使用できるようにプログラムを作成するにはどうすればよいですか。ただし、Hydrogenを追加して行った変更は使用できません。最初は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

質問はあまり明確ではありませんが、検討したいオプションの1つは、オブジェクトを不変にすることです。したがって、単一のオブジェクト内の値を変更することはできませんが、代わりに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 に答える