2012-09-11 4 views
1

ArrayList가 항목을 잃어버린 이유가 있습니까? 나는 Integers를 보유하고있는 ArrayLists를 가지고있는 ArrayList를 가지고있다. 각각에 약 32 개의 항목이 있습니다. 나중에 ArrayList를 호출해야 할 경우 마지막 항목을 제외한 항목이 누락됩니다. 아직 32 개 항목이 있지만 비어 있습니다.ArrayList 잃는 항목

[[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [-16323110, -16688166, -14978279, -837220, -11002320, -4136419, -13118245, -5370572, -11382698, -13140399, -13754890, -8184649, -11711035, -11668025, -12910969, -11058211, -9974559, -9665946, -12513105, -14320755, -16332438, -7673092, -13016023, -15454286, -12413148, -9780316, -2553149, -3313219, -10953060, -940790, -11989718, -12189591]] 

나는 한 번 읽을 수 그리고 난 그것이 사라 졌어요 다시 호출 할 때 모든 것을 나중에있다 ...하지만. 나는 아무것도 제거하지 않을거야. 여기서 무슨 일이 일어나고있는거야?

나는 원래 코드를 게시 할 수는 없지만 모의를 보여줍니다. 코드에서

private ArrayList<ArrayList<Integer>> myArray = new ArrayList<ArrayList<Integer>>(); 

private void makeArray() { 
for(int i = 0; i<= _height - 1; i++) { 
      ArrayList<Integer> row = new ArrayList<Integer>(); 
      for(int ii = 0; ii <= _width - 1; ii++) { 
       row.add(ii);  
      } 
      myArray.add(row); 
     } 
} 

private void readArray() { 
ArrayList<Integer> row = new ArrayList<Integer>(); 

      for(int a = 0; a <= _height - 1; a++) { 
       row.clear(); 
       row = myArray.get(a); 

       for(int aa = 0; aa <= _width - 1; aa++) { 
        int c = row.get(aa); 
//stuff 
       } 
      } 
} 
+3

당신은 row.clear()를 호출하고 있습니다; (이유는 무엇입니까?) – Karussell

+0

데이터가 올바르게 추가되었는지 확인하기 위해 루프를 단계별로 실행하여 디버깅을 시도 했습니까? –

+0

이것은 나를 위해 일했습니다. – arshajii

답변

5

봐 : 각 반복의 시작에서

private void readArray() { 
    ArrayList<Integer> row = new ArrayList<Integer>(); 

    for(int a = 0; a <= _height - 1; a++) { 
     row.clear(); 
     row = myArray.get(a); 
     ... 
    } 
} 

, 당신은 삭제하고있는 ArrayList 마지막 반복에서보고 있었다. 왜 그걸 할거야?

그냥 row.clear() 전화를 없애면 모든 것이 잘 될 것으로 기대합니다. 나는 또한 오히려 더 관용적을 사용하는 것이 좋습니다 것 : 심지어

for(int a = 0; a < _height; a++) { 

또는 더 나은 :

for(int a = 0; a < myArray.size(); a++) { 

심지어 더 나은 :

for (ArrayList<Integer> row : myArray) { 
    ... 
} 

(그럼 당신은 할 필요가 없습니다 myArray.get()으로 전화하십시오!)

+0

나는 너무 생각했다. 그러나 나는 '나는 그것을 읽을 수있다. 모든 것이있다'라고 읽었다. –

+0

@ JohanSjöberg : 아니요, 정확히 요점입니다. * 읽은 다음에 * 읽은 후에 지워 버리므로 * readArray가 호출 된 다음 시간에만 실패합니다. 그것은 책을 읽는 것과 같지만 읽은 후 즉시 각 페이지를 비 춥니 다. 다음에 책을 읽으려면 그 책은 비어 있습니다! –

+0

그 해석으로, 맞습니다. (명백하지 않은 점은 +1) –

관련 문제