0

2D 配列として宣言された一連の変数があります。

int[][] array1 = {{}};
int[][] array2 = {{}};
etc..

私は現在、変数の1つをスイッチ付きのパラメーターとして別のメソッドを呼び出すメソッドを使用しています:

public void invokeMethod(){
switch(variableNumber){
    case 1: method(piece1);
    break;
    case 2: method(piece2);
    break;
    etc..
  }
}

これは、この問題への驚くほど愚かなアプローチのように感じます。もっと賢い解決策はありますか? おそらく変数を配列に格納しますか?何千もの 2D 配列に直面した場合に備えて、次のように、異なるデータ型の変数の値を使用してメソッドを呼び出します。

String arrayToBeInvokedWith = "array1";

method(arrayToBeInvokedWith){
}

(はい、これが単純すぎることはわかっていますが、そこからアイデアを得ることができます)

同様の解決策はありますか?フィードバックは大歓迎です。

編集:すべての配列は同じサイズです。

4

2 に答える 2

0

本当に配列を使用する必要がありますか? HashMap を使用して、1 つの配列を参照するキーを格納できます。1 つの配列を取得するには、配列のキーを渡して取得します。

HashMap<String, int[]> hashMap = new HashMap<String, int[]>();

int array1[] = {1, 2};
int array2[] = {2, 3};
int array3[] = {3, 4};

hashMap.put("array1", array1);
hashMap.put("array2", array2);
hashMap.put("array3", array3);

int arrayWanted[] = hashMap.get("array2");
于 2013-11-08T23:29:47.643 に答える
0

個々の配列の束を宣言する代わりに...

2 次元配列のインスタンスをカプセル化するクラスを作成します。

次に、型が特殊な配列クラスであるジェネリック コレクションを使用すると、配列のすべてのインスタンスを 1 つのコレクションに入れることができます。

その後、配列を操作する必要がある場合は、コレクションを反復処理するだけです。

または、2D 配列オブジェクトのそれぞれに特定の ID を関連付ける必要がある場合は、その ID を HashMap 内のオブジェクトのキーとして関連付けます。次に、いずれかの配列を操作する必要がある場合は、そのキーを使用してマップから取得できます。

代わりに

public void invokeMethod(){
    switch(variableNumber){
        case 1: method(piece1);
            break;
        case 2: method(piece2);
            break;
        :
        :
    }
}

あなたは単に次のようなものを使うことができます

public <T extends MyArrayClass> void invokeMethod(String arrKey, HashMap<String,T>
        arrays) {
    T my2dArray = arrays.get(arrKey);
    method(my2dArray);
    :
    :
}

あなたのような問題に直面したときの解決策は、多くの場合、データの抽象化を表す新しい型を作成することです。

于 2013-11-08T23:22:34.850 に答える