2012-05-05 25 views
-2

このコードは、truthealityの助言に従って編集されました。ArrayListの問題<ArrayList <String>>

私はこの問題の良いタイトルを考え出すのに問題があります。あなたが良いアイディアを持っていれば、気軽に変更してください。

私は2次元のArrayListを作成しています。そのために私はArrayList<String>を入力し、それをArrayList<ArrayList<String>>に加えます。私はループの中でそれを行い、毎回新鮮なArrayList<String>を得ることを望んでいました。これは起こらないので、はの累積値ArrayList<String>で満たされます。私がArrayList<String>を埋め込むたびに、それはすでに持っているものが追加されるからです。

ArrayList<String> oneD = new ArrayList<String>(); 
ArrayList<ArrayList<String>> twoD= new ArrayList<ArrayList<String>>(); 

Cursor tSCursor = retrieveTS(tId); 
tSCursor.moveToFirst(); 

for (int i = 0; i < tSCursor.getCount(); i++) 
    { 
     stockId = tSCursor.getString(tSCursor.getColumnIndex("_id")); 

     oneD.add(sId); 

     oneD.addAll(retrieveSFinParams(sId)); 

     twoD.add(sFinParams);   

     tSCursor.moveToNext(); 
    } 

Iは、(クリア使用する場合、私はまた、2DのArrayListの値を失う)、(sFinParams.clearを試みた)が、コンテナのJavaユーザーが参照として。

新しいArrayListを取得するにはどうすればよいですか?2D ArrayListをフルにしたら、1D ArrayListの内容は複製されません。

私はあなたがループの各反復でのArrayListの新しいインスタンスを作成する必要があります任意のヘルプ、 D

+1

、それはあなたがクラスに欠けていることを意味します。 OOPコードはそれらの質問を避ける。 –

+1

投票しましたか?私はそれが悪い質問だとは思わない、ちょうど間違って... – Tharwen

+0

あなたのコードは少し難しいです(例えば、sFinParamsは何ですか?そしてArrayListはどこですか?)。達成しようとしていることのより簡単な例を挙げることができますか? – Hedja

答えて

2

は、あなたが繰り返しtwoDに同じオブジェクト(oneD)を追加し、代わりのtwoD内のすべてのエントリの新しいoneDArrayListを作成しているということです。修正プログラムは、単にその次のとおりです。すべての反復が異なるoneDで動作するように、内部oneDループを作成する:あなたは配列リストの配列リストを作るとき

ArrayList<ArrayList<String>> twoD= new ArrayList<ArrayList<String>>(); 

Cursor tSCursor = retrieveTS(tId); 
tSCursor.moveToFirst(); 

for (int i = 0; i < tSCursor.getCount(); i++) 
{ 
    stockId = tSCursor.getString(tSCursor.getColumnIndex("_id")); 

    ArrayList<String> oneD = new ArrayList<String>(); 

    oneD.add(sId); 

    oneD.addAll(retrieveSFinParams(sId)); 

    twoD.add(oneD);   

    tSCursor.moveToNext(); 
} 
+0

ありがとうtrutheality - 答えはとてもシンプルです: - /私は夜遅くコーディングすべきではないと思う、これはしばしば悪い結末を持っています。確かにあなたは正しいです - 私が与えたコードは誤解を招いています、私は今それを修正します。そのことについて謝ります。ここで誰かがそれについて私のポイントのいくつかを控除しました。私を目覚めさせてくれてありがとう – roysch

3

を感謝しています。そうでなければ、同じ内部リストに要素を追加し続け、この内部リストを外部リストに複数回追加します。私はあなたのコードは、問題が実際に

ArrayList<String> oneD = new ArrayList<String>(); 
ArrayList<ArrayList<String>> twoD= new ArrayList<ArrayList<String>>(); 

Cursor tSCursor = retrieveTS(tId); 
tSCursor.moveToFirst(); 

for (int i = 0; i < tSCursor.getCount(); i++) 
{ 
    stockId = tSCursor.getString(tSCursor.getColumnIndex("_id")); 

    oneD.add(sId); 

    oneD.addAll(retrieveSFinParams(sId)); 

    twoD.add(oneD);   

    tSCursor.moveToNext(); 
} 

だったことを想像するつもりです

関連する問題