1

インスタンス変数を使用する際の演習 (私はプログラミングの学生ですが、これは自分の好奇心を満たすための演習であり、段階的な課題のためではないことに注意してください) として、クラスの不特定の数のインスタンスを作成し、それぞれに固有の名前。私の考えは、次のようなループを作成することです。

int i=1;
while (! response.equals("quit")){
    SomeClass object_i = new SomeClass();
    i++;
...
}

これにより、プログラムはユーザーが必要とする数の SomeClass のインスタンスを作成し、次のようなそれぞれのインスタンス変数を参照できるようになります。

for (i=1; i <= count; i++){
    sum += object_i.nonStaticInstanceVariable;
}

このスレッドで AtomicLong を使用した一意の識別子名の提案があります: Java for loop の実行が速すぎると System.currentTimeMillis() が重複する

しかし、このメソッドを使用して作成された特定のオブジェクトでインスタンス変数を参照する方法がわかりません。私がJavaでやろうとしていることを誰かが提案できますか?

どうもありがとう。

4

5 に答える 5

1

最初のforループでは、のインスタンスを作成しSomeClassていますが、それらを使用して何もしていません。あなたがしたいのは、それらをある種のコレクションに集めることです。そうすれば、後で次のようにそれらを参照できます。

int i=1;
List<SomeClass> classes = new ArrayList<SomeClass>();
while (! response.equals("quit")){
  classes.Add(new SomeClass());
  i++;
  ...
}

これで、コレクションをループして、それらを使用して何か便利なことを行うことができます。

for (SomeClass someClass : classes) {
  sum += someClass.nonStaticInstanceVariable;
}
于 2011-07-14T15:47:11.010 に答える
0

マップとユニバーサル一意識別子(UUID)を使用します。例については、 java.util.UUIDを参照してください。

Map<UUID,SomeClass> map = new HashMap<UUID,SomeClass>();

for (int i=0;i<1000000;i++) {
    UUID key = UUID.randomUUID()
    map.put(key, new SomeClass());
}

これで、ユーザーがを持っている場合UUID、適切なへの参照を取得できますSomeClass

于 2011-07-14T15:46:22.497 に答える
0

笑、あなたは本当に始めたばかりでなければなりません。
これを読んでください-http ://download.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

あなたが持っているもののほとんどは理にかなっていますが、あなたはする必要があります-

SomeClass myObject[i] = new SomeClass();

編集:他の人のオプションも機能しますが、最初にこの方法でそれを行うことを学ぶ必要があります。

于 2011-07-14T15:46:29.657 に答える
0

実行時にインスタンス変数を作成することはできません(新しいクラスのコンパイルとロードを除く)

これには配列またはマップを使用します

(または、JVM上で実行されるGroovyのような動的言語を使用します。これは、内部的にマップのような構造を使用します)

于 2011-07-14T15:46:35.923 に答える
0

配列や配列リストなど、ある種のコレクションを使用したいだけだと思います。

List list = new ArrayList();
        int i=1; 
       while (! response.equals("quit"))
    {     list.add(new SomeClass());     
    i++;
} 

その後、ArrayList でインデックスを取得することでアクセスできます。

list.get(index);
于 2011-07-14T15:48:36.070 に答える