2012-01-02 6 views
0

Hello는 Java로는 몇 시간 밖에 걸리지 않습니다. (Python에서) 다차원 배열을 정의하고 "add"메서드로 채 웁니다.다차원 ArrayList에 항목 추가

[("UW,"100 "), ("UM ","10 "), (:이와 결국 DrawInstructions 예상

List<String[]> DrawInstructions = new ArrayList<String[]>(); 
String[] pair = {"",""}; 

pair[0]="UW"; 
pair[1]="100"; 
DrawInstructions.add(pair); 

pair[0]="UM"; 
pair[1]="10"; 
DrawInstructions.add(pair); 

pair[0]="UT"; 
pair[1]="50"; 
DrawInstructions.add(pair) 

: 그러나, 좀 이상한 결과를보고하고있다 "UT", "50")]

하지만 그 대신 내가 점점 오전 :

[("UT", "50"), ("UT", "50"), ("UT", " 50 ")]

나는 이것이 꽤 기본적인 것이라고 확신하지만 그것을 이해할 수 없다. 몇 시간 동안 수색했다. 어떤 충고라도 받아 들여.

+2

같은 개체를 목록에 세 번 추가하고 있습니다. 'add'함수는 객체를 복제하지 않습니다. – DRCB

+0

http://stackoverflow.com/questions/40480/is-java-pass-by-reference –

답변

2

동일한 배열 (쌍)을 세 번 추가하고 있습니다. 당신이하는 일은 그 가치 (내용)를 바꾸는 것뿐입니다. java는 객체의 사본이 아니라 참조에 대해 작동한다는 점을 기억하십시오.

pair1, pair2, pair3을 만들어보세요. 당신은 동일한 개체를 3 회를 편집 목록에 있음을 추가 하나 String[] pair = {"",""};

+0

이것은 설명합니다. 모든 답변을 주셔서 감사합니다. –

1

당신은 정의했다. 당신은 그렇게 할 수 있습니다 :

List<String[]> DrawInstructions = new ArrayList<String[]>(); 

String[] pair1 = {"",""}; 
pair1[0]="UW"; 
pair1[1]="100"; 
DrawInstructions.add(pair1); 

String[] pair2 = {"",""}; 
pair2[0]="UW"; 
pair2[1]="100"; 
DrawInstructions.add(pair2); 
.... 
3

문제는, 당신은 동일한 배열을 변경하고 - 당신을 위해 복사본을 생성하지 않습니다 .add(). 더 나은 다음, NPEs를 방지, 자바 명명 표준에 가깝게 로컬 상태를 최소화하고, 틀림없이 더 읽을 것

List<String[]> drawInstructions = new ArrayList<String[]>(); 
drawInstructions.add(new String[] {"UW", "100"}); 
drawInstructions.add(new String[] {"UM", "10"}); 
drawInstructions.add(new String[] {"UT", "50"}); 

List<String[]> DrawInstructions = null; 
String[] pair = {"",""}; 

pair[0]="UW"; 
pair[1]="100"; 
DrawInstructions.add(pair); 

pair = new String[] {"",""}; 
pair[0]="UM"; 
pair[1]="10"; 
DrawInstructions.add(pair); 

pair = new String[] {"",""}; 
pair[0]="UT"; 
pair[1]="50"; 
DrawInstructions.add(pair); 

또는 다음보십시오.