2

Carオブジェクトを作成していて、変数「carCounter」で作成された車の数をカウントしています。CarCounterは0から始まり、Carオブジェクトにcar(carCounter)という名前を付け、車を作成するたびにカウンターを増やして、車の名前をcar0、car1、car2などにします。オブジェクトの作成?

Car()のようなものcar(+ carCounter +)= new Car(); ?

4

4 に答える 4

2

あなたが欲しいのはArrayだと思います:

Car[] cars = new Car[3];
cars[0] = new Car();
cars[1] = new Car();
cars[2] = new Car();

これにより、変数を介してインデックス (カウントと呼んでいたもの) を参照することもできます。

int n = 1;
Car carAtIndexN = cars[n];

車のセット全体を初期化する場合は、ループで実行することをお勧めします。

int totalCarCount = 10;

Car[] cars = new Car[totalCarCount];

for (int i=0; i<totalCarCount; i++) {
  cars[i] = new Car();
}
于 2012-10-21T19:03:47.837 に答える
1

変数を維持しstatic counter、 のインスタンスを作成するたびにclass、その変数をインクリメントして、そのインスタンスに設定できます。

public class YourClass {
    private static counter = 0;
    private String name;

    public YourClass() {
        name = "car" + counter;
        counter++;
    }
}
于 2012-10-21T19:02:50.443 に答える
0

スレッド セーフを維持するstatic AtomicLongために、タスクに変数を使用することをお勧めします。この変数は、コンストラクターの最後のコマンドとしてインクリメントされます。このようにException、コンストラクターに があった場合、カウンターはそのままになります。

public final class Car {
    private static AtomicLong carCounter = new AtomicLong();
    public Car() {
        //do the dirty things here
        carCounter.incrementAndGet();
    }  
    public static long getCounterValue() {
        return carCounter.get();
    }
}

finalクラスがこれを拡張する場合、そのコンストラクターはカウンターが保存された後に操作を実行でき、それにより物事が矛盾​​した状態のままになるため、クラスも作成します (カウンターは作成されたインスタンスの数を反映しません)。 ..

これだけの制約があると、これはあまり便利な状況ではありませんね。最善の解決策は、抽象ファクトリを使用してインスタンスを作成し、カウンターを追跡することだと思います。たぶん、その抽象ファクトリはシングルトンでさえあるはずです...

于 2012-10-21T19:15:56.560 に答える
0
 public Class Car {
    public static int counter= 0;
    String name="";
    public Car() {
       counter++;
       name= "car"+ counter;
    };
}

Car クラスは以上です。

于 2012-10-21T19:06:17.710 に答える