2

私はJavaアプリを書いています。

これは私のコードのサンプルです:

int [] digitPart_1 ={16,7,9,8,5,6,};
int [] digitPart_2 ={1,77,98,86,5,6,};
int [] digitPart_3 ={166,7,49,84,55,6,};

for(int i = 0; i < mfl.size(); i++){
 new DataProcessing(digitPart_+""+(i + 1));
}

私の設計では、0 + 1 = 1、1 + 1 = 2、つまり digitPart_1 などであるため、各部分 (たとえば、digitPart_1) が渡されます。しかし、それはコンパイル エラーを引き起こします。渡す配列の名前を変更することはできません。「mfl」は重要ではありません。番号 3 を格納する必要があります。あなたのように動的に渡すデータ構造の名前を変更できるかどうか疑問に思っていました。出力ストリームに渡す文字列を変更します。

この問題を克服する方法について何か提案はありますか? 乾杯

4

5 に答える 5

2

それはあなたがやろうとしていることのほとんどであるため、2次元配列を使用してください。コンパイルされた言語は単純にこのようには機能しませんが、Java リフレクションを調べることはできます (関連性はありますが、ここでは適切な設計ツールではありません)。

于 2012-09-05T21:04:23.837 に答える
2

変数の名前を動的に変更することはできません。ただし、代わりに配列を使用できます。

int[][] digitPart = {{16,7,9,8,5,6}, {1,77,98,86,5,6}, {166,7,49,84,55,6}};

for(int i = 0; i < mfl.size(); i++){
   new DataProcessing(digitPart[i]);
}
于 2012-09-05T21:05:29.047 に答える
1

Java では動的変数名を使用できません。

代わりに、 Map を使用するのはどうですか?

Map<Integer, int[]> myMap = new HashMap<Integer, int[]>();

myMap.put(1 , {16,7,9,8,5,6,} );
myMap.put(2 , {16,7,9,8,5,6,7} );
...

and then 

for ( Integer i : myMap.keySet() ) 
    new DataProcessing(myMap.get(i));
于 2012-09-05T21:06:47.083 に答える
1

メソッドのローカル変数ではなくフィールドを使用している場合にのみ、これを行うことができます。

int[] digitPart_1 = { 16, 7, 9, 8, 5, 6, };
int[] digitPart_2 = { 1, 77, 98, 86, 5, 6, };
int[] digitPart_3 = { 166, 7, 49, 84, 55, 6, };

public void foo() {
    for (int i = 1; i <= 3; i++) {
        try {
            System.out.println(getClass()
                    .getDeclaredField("digitPart_" + i));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

ただし、配列の配列を使用するようにコードを再構築することをお勧めします。

int[][] digitPart = { { 16, 7, 9, 8, 5, 6, }, { 1, 77, 98, 86, 5, 6, }, { 166, 7, 49, 84, 55, 6, } };
for (int i = 0; i < 3; i++) {
    System.out.println(digitPart[i]);
}

さらに良いのは、特定の低メモリ要件がない限り、Java コレクションを使用して構造を表すことです。

Map<String, List<Integer>> digitPart = new HashMap<String, List<Integer>>();
digitPart.put("digitPart_1", Arrays.asList( 16, 7, 9, 8, 5, 6));
digitPart.put("digitPart_2", Arrays.asList( 1, 77, 98, 86, 5, 6));
digitPart.put("digitPart_3", Arrays.asList(166, 7, 49, 84, 55, 6));

digitPart.get("digitPart_2").get(2); // 98
于 2012-09-05T21:08:35.590 に答える
0

あなたがしたことはJavaでは違法です。変数名は、コンパイル時に知っておく必要があります。

代わりにできることはMap、キーが変数の名前 ( digitPart_1...) で、エントリが配列 ( {16, 7,...}...) である a を作成することです。

ループでは、. を介して配列にアクセスできますMap

于 2012-09-05T21:05:33.430 に答える