Plus pTmp = new Plus();
17번째 줄에 선언한 변수 pTmp가 문제인 것 같네요.
if (tmp>0) {
pTmp.val=tmp;
pTmp.idx=i;
plus.add(pTmp);
}
위 코드에서 for문을 돌기 전에 선언한 pTmp를 값만 바꿔서 ArrayList에 똑같은 pTmp를 add하고 있습니다.
객체단위의 주소 참조를 이해하셔야 하는데,
pTmp의 주소값이 A라고 한다면, ArrayList에는 실제로 pTmp의 주소를 index별로 A A A ... 이렇게 순서대로 저장하고 필요할 때 해당 주소에서 값을 가져오는 것입니다.
즉, 500을 넣고 50을 넣었지만, 똑같은 객체가 나열되어 있으니 그 중 한 객체의 값을 바꾸면 나머지 모두도 똑같기 때문에(실제론 객체의 주소가 같기 때문에) 가장 마지막에 값을 바꾼 50이 최종적으로 저장됩니다.
JAVA 언어로 코딩을 하다보면 위와 같은 문제가 아니더라도 비슷한 문제에 자주 마주치게 될 것이니 특히 주의하셔야 합니다.
skdltm357 6년 전
제 소스코드가 plus면 plus ArrayList에 저장하는건데 5 500 -200 -400 50 50 이렇게 입력하면 plus ArrayList의 var값들은 plus.get(0).val plus.get(1).val plus.get(2).val 값들은 500 50 50 이 되어야 한다고 생각하는데 자꾸 plus에 처음에 500은 잘들어 가는데 50이 들어가는 순간 500도 50으로 바껴서 50 50 50으로 들어갑니다. 제가 add를 메소드를 잘못 생각하고 있는건지 왜 제대로 동작하지 않는지 모르겠습니다.