0

私のアプリケーションでは、2 次元配列が必要です。私がそれを定義すると、次のように問題なく動作します。

static final String arrGroupelements[] = {"India", "Australia", "England", "South Africa"};
    static final String arrChildelements[][] = { {"Sachin Tendulkar", "Raina", "Dhoni", "Yuvi" },
                                                 {"Ponting", "Adam Gilchrist", "Michael Clarke"},
                                                 {"Andrew Strauss", "kevin Peterson", "Nasser Hussain"},
                                                 {"Graeme Smith", "AB de villiers", "Jacques Kallis"} };

ただし、私のコードには 2 つのリストがあります。最初は入手できるレシピ名のリストです。

LinkedList<String> recipeList = dbShoppingHandler.getAllRecipeNames();
        String arrGroupelements[] = new String[recipeList.size()];
        for(int i=0; i<recipeList.size(); i++) {
            arrGroupelements[i] = recipeList.get(i);
        }

私の2番目のリストは成分のリストです。材料のリストを取得するには、レシピ名を設定する必要があり、リストを取得できます。しかし、このリストを二次元にする方法がわかりません。私のコードは次のようなものです:

String arrChildelements[][] = new String[recipeList.size()][20];
        for(int i=0; i<recipeList.size(); i++) {
            LinkedList<String> ingredient = dbShoppingHandler.getIngredientsOfRecipeName(recipeList.get(i));
            for(int j=0; j<ingredient.size(); j++) {
                arrChildelements[i][j] = ingredient.get(j);
            }
        }

悪いことに、2 番目の次元に数値 (私の場合は 20) を設定する必要があります。5 つのアイテムを持つリストに対してこれを行うと、15 個の " " 要素があり、20 個を超えるアイテムを持つリストはコードによって無視されます。

最初の次元は修正されていますが、成分の数に基づいて 2 番目の次元を調整する必要があります。

任意の提案をいただければ幸いです。ありがとう。

4

3 に答える 3

4

目的のサイズで配列を割り当てるのはどうですか:

String arrChildelements[][] = new String[recipeList.size()][];
//                     not mentioning second dimension size ^^
for(int i=0; i<recipeList.size(); i++) {
    LinkedList<String> ingredient = dbShoppingHandler.getIngredientsOfRecipeName(recipeList.get(i));
    arrChildelements[i] = String[ingredient.size()];
//   assigning new array here ^^
    for(int j=0; j<ingredient.size(); j++) {
        arrChildelements[i][j] = ingredient.get(j);
    }
}
于 2012-08-06T08:20:47.800 に答える
1

動的構造には 2D 配列を使用しないことをお勧めします。配列は不変であるため、それらをコピーし、ギャップを作成し、要素を移動する必要があります。標準の Java ライブラリには、これを行うための便利なメソッドはあまりありません。

代わりに、リストのリストを使用します。

List<List<String>> data = new ArrayList<List<String>>();

リストには、要素を追加したり、挿入したり、削除したりするための便利なメソッドがたくさんあり、作業がずっと楽になります。

于 2012-08-06T08:22:46.113 に答える
0

事前に長さを知っていると仮定しないための最も簡単な方法。

String[][] arrChildelements[] = new String[recipeList.size()][];
for(int i=0; i<recipeList.size(); i++) {
    List<String> ingredient = dbShoppingHandler.getIngredientsOfRecipeName(recipeList.get(i));
    arrChildelements[i] = ingredient.toArray(new String[0]);
}
于 2012-08-06T08:26:21.103 に答える