2011-03-06 4 views
0

나는 Group 배열을 가지고있다. 증분을 호출 할 때 객체의 ID를 증가 시키려면 (배열에서) 배열에있는 모든 객체의 모든 ID가 증가됩니다. 왜 제발 알아?자바에서 이상한 객체/클래스 동작

Group [] groups = new Group [g]; 
    groups[0] = group; 
    for (int i=1; i<g;i++){ 
     groups[i] = groups[i-1]; 
     groups[i].increment();    .......... A 

    } 


    public void increment() { 
     this.groupid = this.groupid++; 
    } 
+1

'this.groupid ++'는 (는)'this.groupid'에 다시 할당하면 안됩니다. – BoltClock

+0

스택 오버플로에 오신 것을 환영합니다! 'groupid'는'static '으로 표시 될 수 있습니다. 그것은 당신의 행동을 설명 할 것입니다. 버그 추적을 쉽게하기 위해'Group'에 대한 나머지 코드를 게시 할 수 있습니까? – templatetypedef

+0

아무 것도 정적이 아닙니다 – Tyr

답변

3
for (int i=1; i<g;i++){ 
    groups[i] = groups[i-1]; 
    groups[i].increment(); 
} 

배열의 모든 인덱스는 같은 그룹의 객체를 참조.

+0

예, 그룹 0은 ID = 1을가집니다. – Tyr

+0

다음 그룹 1에는 ID = 2가 있어야합니다. 그러나 모든 것이 할당 된 가장 높은 ID와 동일하게 유지됩니다. – Tyr

1

단순히 배열의 모든 요소에 대한 참조를 복사하기 때문에. 모든 요소는 그룹의 동일한 인스턴스를 포함하지만 다른 참조를 포함합니다.

루프에서 매번 새 그룹 개체를 만들거나 복사 생성자를 사용해야합니다.

1

두 가지 문제가 있습니다.

먼저 증가 방법이 실제로 작동하지 않습니다. 아마도 다음과 같아야합니다 :

그렇지 않으면 실제로 변경되지 않습니다.

두 번째 문제는 이미 다른 대답에 의해 언급되었습니다. 즉, 실제로 하나의 Group 개체와 하나의 개체에 대한 많은 참조가 있습니다.