1

達人、二重リンクリストの配列リストをパラメータとして渡すのは難しいです。

リンクリストを含むデータ構造で正方行列を表す必要があります。二重リンクリストの配列リストを使用することにしました。テキストファイルから読み取られた行列情報は、次の場所に保存されます。

ArrayList<DoubleLinkedList<Integer>> dLLArrayList

最初の入力を読み込んだ後、dllArryListにはコンテンツが含まれます"[[5]]"

自己定義のMatrixクラスからコンストラクターを呼び出して、新しいマトリックスオブジェクトを作成しようとしています。

Matrix mx1 = new Matrix (dimension, dLLArrayList);

**ディメンションは、入力テキストファイルに示されているように、行列のサイズを格納するint変数です。たとえば、1行1列の行列の場合は1です。

ただし、Matrixクラス内のマトリックスコンテンツを印刷しようとすると、次のようになります。"[[]]":

System.out.println (this.getMatrixArrayList());

MatrixオブジェクトのArrayList要素を設定することを想定したmatrixクラス内のsetメソッドは次のとおりです。

public void setMatrixArrayList(ArrayList<DoubleLinkedList<Integer>> matrixArrayList) {
    for(int i = 0; i < matrixArrayList.size(); i ++){
        for (int j = 0; j < matrixArrayList.get(i).size(); j ++) {
            this.rowItemList.add(matrixArrayList.get(i).get(j));
        }
        this.matrixArrayList.add(this.rowItemList);
        this.rowItemList.clear();
    }
}

これが機能しない理由は何ですか?提案、コメント?

4

3 に答える 3

2

問題は、rowItemListをクリアすることです。rowItemListをarraylistに追加するときは、そこに参照を配置するだけです。したがって、後でクリアすると、arraylist内に追加されたリンクリストもクリアされます。外側のリストに追加するときは、rowItemListのクローンを作成する必要があります。

public void setMatrixArrayList(ArrayList<DoubleLinkedList<Integer>> matrixArrayList) {
for(int i = 0; i < matrixArrayList.size(); i ++){
    for (int j = 0; j < matrixArrayList.get(0).size(); j ++) {
        this.rowItemList.add(matrixArrayList.get(0).get(j));
    }
    this.matrixArrayList.add(this.rowItemList.clone());
    this.rowItemList.clear();
}
}
于 2012-08-07T03:36:45.223 に答える
0

iどこにも使用しません。

私はあなたが欲しいと思う:

for (int j = 0; j < matrixArrayList.get(i).size(); j ++) {
        this.rowItemList.add(matrixArrayList.get(i).get(j));
    }
于 2012-08-07T03:17:55.393 に答える
0

ArrayListまたはLinkedListは、他のリンクリストの配列にすぎません。

だから私は仮定しています

public ArrayList<ArrayList> methodTest(ArrayList<ArrayList> doubleList) {} 

うまくいくだろう

于 2012-08-07T03:18:11.647 に答える