1

シナリオごとに異なる数のオブジェクトを作成する必要があるテスト入力ファイルが 1 つあります。

例: 1 つのテスト入力の場合、名前 v0、v1、v2 で作成するオブジェクトは 3 つでなければならず、他のテスト入力の場合、名前 v0、v1、v2、v3、v4 で作成するオブジェクトは 5 つでなければなりません。

5 つのオブジェクトの静的プログラムの場合は、次のようになります。

    Vertex v0 = new Vertex("a");
    Vertex v1 = new Vertex("b");
    Vertex v2 = new Vertex("c");
    Vertex v3 = new Vertex("d");
    Vertex v4 = new Vertex("e");
    Vertex v5 = new Vertex("f");

k=5 (オブジェクトの数) の場合、次のように動的にしたい:

for(int i=0;i<k;i++){
    Vertex vi= new Vertex("str");
}
4

3 に答える 3

12

必要なものは地図です<String, Vertext>

String arr = new String[]{"a", "b", "c", "d", "e", "f"};
Map<String, Vertex> map = new HashMap<>();
for(int i = 0; i < arr.length; i++) {
    map.put("v" + i, new Vertext(arr[i]));
}

次に、名前を使用してオブジェクトを取得できます。たとえば、必要なv3場合は次のように記述できます。

Vertex v3 = map.get("v3"); // returns the object holding the String "d"
System.out.println(v3.somevariable);

がコンストラクターに渡した文字列を保持している場合somevariable、print ステートメントの出力は次のようになります。

d
于 2013-10-22T19:16:19.150 に答える
3

普通のJavaでそれを行うことは不可能です。ASM や何らかのバイト コード操作ライブラリを使用して何とか達成できるはずですが、努力する価値はありません。それを行う最善の方法は、を使用することMapです。MapはインターフェースでHashMapあり、その実装であることに注意してください。

String[] names = {"v1", "v2", "v3"};
String[] constructorArgs = {"a", "b", "c"};
Map<String, Vertex> map = new HashMap<String, Vertex>();
for (int i = 0; i < names.length; i++)
{
    map.put(names[i], new Vertex(constructorArgs[i]));
}

for (int i = 0; i < names.length; i++)
{
    Vertex v = map.get(names[i]);
    //do whatever you want with this vertex
}

経由で名前を使用して変数にアクセスできますmap.get(name)

ASM の詳細については、この回答を参照してください。

于 2013-10-22T19:28:51.217 に答える
2

Mapキーが(String名前) で、値がVertex.

例えば:Map<String, Vertex>

次に、これを行うことができます:

Map<String, Vertex> testObjs = new HashMap<String, Vertex>();

for(int i = 0; i < k; i++)
    testObjs.put("v" + String.valueOf(i), new Vertex(i));

// The names would be like v1, v2, etc.
// Access example
testObjs.get("v1").doVertexStuff();
于 2013-10-22T19:18:04.187 に答える