2014-12-07 1 views
2

String[]의 목록이 있는데, n 번 반복되는 루프 안에 배열을 추가합니다.목록에 요소를 추가하는 것은 이전 요소를 모두 업데이트하는 것입니다.

String[] parsedFields = new String[fieldsToParse.length]; 
List<String[]> myList= new ArrayList<String[]>(); 

while (getType()) { 
    // ... 
    for (int i = 0; i < fieldsToParse.length; i++) { 
     if (name.equals(fieldsToParse[i])) { 
parsedFields[i] = fieldsToParse; 
// ... 
     } 
    } 
    myList.add(parsedFields); 
} 

배열이 나열 될 때마다 배열은 동일하지만 값은 다릅니다.

새로운 반복에서 배열을 추가 할 때마다 이전에 추가 된 모든 배열이 마지막 배열의 내용에 따라 업데이트됩니다.

예 : 첫번째 반복에 myList가 포함

myList > array > [0] = [2, 2, 'B'] 
myList > array > [0] = [2, 2, 'B'] 

및 셋째로는 것이다 : 두 번째 반복에서

myList > array > [0] = [1, 1, 'A'] 

리스트가 될 것이다

myList > array > [0] = [3, 3, 'C'] 
myList > array > [0] = [3, 3, 'C'] 
myList > array > [0] = [3, 3, 'C'] 

및 언제 while 루프가 모두 끊어 목록의 배열 요소에는 동일한 배열이 포함됩니다 (실제로 마지막 배열이 추가됩니다). 업데이트 된 이전에 추가 된 배열에서 어떻게 중지시킬 수 있습니까?

답변

3

parsedFields 선언을 while 루프 내부로 이동합니다. 그렇지 않으면 방금 동일한 배열을 업데이트하고이를 가리 키도록 myList에서 새 참조를 만듭니다.

1

루프를 중심으로 매번 새로운 배열을 만들어야합니다. 루프 내에서 parsedFields이라는 선언을 이동하십시오.

관련 문제