2011-04-11 4 views
0

저는 arraylist를 만들고 DO While 루프에 요소 (문자열 배열)를 추가했습니다.arraylist의 요소가 중복되었습니다.

aStringArray = tempList.get(index); 
Log.i(TAG,"aStringArray[0] = " + aStringArray[3]); 
index++; 

제가 첨가 된 3 개 어레이 요소의 각각에 대한 올바른 문자열을 얻을 : 루프는 다음과 같은 코드를 사용하는 동안은 DO 내의 배열을 선택하면

tempList.add(recordArray); //- recordArray is a String[] 

//ArrayList<String[]> tempList = new ArrayList<String[]>();// is declared in the activity before onCreate method 

: 난이 요소를 추가 다음 사용 arrayList에 저장합니다.

문제는 내가 DO WHILE 루프 외부에서 동일한 코드를 사용해도 3 개의 반복마다 동일한 문자열이 표시되는 것입니다. 내가 모든 것을 검색 한

1st iteration - aStringArray[3] - displays "100800 
2nd iteration - aStringArray[3] - displays "100800 
3rd iteration - aStringArray[3] - displays "100800 

: 루프 난 다음 얻을 동안 DO의

1st iteration - aStringArray[3] - displays "100350 
2nd iteration - aStringArray[3] - displays "100750 
3rd iteration - aStringArray[3] - displays "100800 

외부 : 루프 난 다음다면 그렇게

은 DO에서, 요약하기 답변을 찾았지만 찾을 수는 없습니다. 여기있는 누군가가 도울 수 있기를 바랍니다.

훨씬

감사 클라이브

+1

코드를 게시 할 수 있습니까? 나는 네가 여기서 말하는 것을 실제로 따라갈 수 없다. – James

+1

루프 외부에서 ** 특정 ** 코드를 사용하여 반복을 표시 할 수 있습니까? – QuantumMechanic

답변

2

난 강력하게 당신이 같은 문자열 배열은 루프를 통과 할 때마다 추가하는 의심. 매번 문자열 배열을 만들어야합니다.

목록에 참조 () 만 포함되어 있음을 잊지 마세요. 그래서 내 생각 엔 당신의 코드는 다음과 같은 것입니다 :

ArrayList<String[]> tempList = new ArrayList<String[]>(); 
String[] recordArray = new String[4]; 

for (int i = 0; i < 10; i++) 
{ 
    recordArray[0] = "a" + i; 
    recordArray[1] = "b" + i; 
    recordArray[2] = "c" + i; 
    recordArray[3] = "d" + i; 
    tempList.add(recordArray); 
} 

ArrayList (10)의 동일한 참조로 끝나는 그. 대신, 당신이 원하는 :

ArrayList<String[]> tempList = new ArrayList<String[]>(); 

for (int i = 0; i < 10; i++) 
{ 
    String[] recordArray = new String[4]; 
    recordArray[0] = "a" + i; 
    recordArray[1] = "b" + i; 
    recordArray[2] = "c" + i; 
    recordArray[3] = "d" + i; 
    tempList.add(recordArray); 
} 

당신이 목록에서 10 개 다른 배열에 대한 참조를 가지고 그런 식으로.

+0

대단히 감사합니다. 그게 내 문제 였어. 나는 완전히 혼란 스러웠다는 사실에 의해 혼란 스러웠다. 그리고 whithin whithin에서 문자열을 추출 할 때 Do-WHILE 루프는 완벽하게 작동했다. 그러나 동일한 루프를 사용하여 문자열을 추출했지만 DO-WHILE 루프 바깥 쪽에서는 같은 문자열을 반복해서. 대단히 감사합니다. – idig

0

코드를 게시하지 않았으므로 추측해야합니다. 동일한 String[]을 목록에 여러 번 추가하고 루프의 반복마다 해당 단일 배열 인스턴스를 수정하는 것처럼 들립니다.

각 반복마다 실제로 새 배열을 할당해야합니다. 예 : 다음과 같은 줄이 있어야합니다.

recordArray = new String[size]; 

+0

대단히 감사합니다. 그게 내 문제 였어. 내 코드가 바뀌었고 완벽하게 작동합니다.다시 한 번 감사드립니다. – idig

관련 문제