안드로이드 개발 질문/답변
(글 수 45,052)
현재 arraylist<Music> gotcha(xxdkxjdlfkdjf);
Music은 제가 만든 class 입니다.
를 반환해서 사용하려 합니다.
ArrayList<Music> ok = new ArrayList<Music>();
ok = gotcha(dfkjajel);
이런 식으로 해서 ok 에 반환되는 ArrayList<Music>을 받았습니다.
그런데!!!!!!!!
이게 웬걸... 왠지 아닌지 긴지 먼지 완지 간자??
인지....
ok 에 반환 값보다 더 많은 값이 들어가는 겁니다.
그래서 살펴 보니
clone 이라는 방법이 있는 듯 한데...'
잘 동작이 안됩니다.
가르쳐주세요! 고수님들

2011.02.14 16:57:20
??
main (){
ArrayList<Music> ok = new ArrayList<Music>();
private ArrayList<Music> gotcha(ArrayList<Music> allso){
ArrayList<Music> okokokok = new ArrayList<Music>();
blurblurblurblur
return okokok;
}
}
혹시 함수안에서 동적할당을 해줘서 그런건가요??
이런식으로 되어있습니다.
2011.02.14 17:03:37
Collections.copy(List dest, List, src) 가 있습니다.
인스턴스를 생성하고나서 거기에 다른 인스턴스 참조를 넣게 되면 그전에 생성한건 없어지는거죠 쓸모가 없어지니 윗분이 말씀하신듯
2011.02.14 17:04:30
return okokok; 직전의 okokok의 크기와 ok = getcha()직후 ok의 크기가 다르다는건지? 보여주는 소스만 볼때는 별 문제 없을 것 같은데...
main처음에 ok객체는 무의미하게 만드는 것 같고...
ArrayList<Music> ok = gotcha(dododo);
로 통합하는게 더 낫죠.
2011.02.14 17:14:56
mg2000///// 그렇군요 아하!! 인스턴스라는 게 Class instance; 이런 뜻이군요. 허허허허 ...허허ㅓ허허허허헣허 그...그렇구나..
어쨋든 그렇게 해봤는데 안 됩니다. ㅠ
좀더 자세히 얘기 드리면
이 아니라 위에 나온 데로
ArrayList<Music> gotcha(ArrayList<Music ooo) 식인데..
ok = gotcha(dododo);
이렇게 리턴시에 ok 안에 return 한 ArrayList 값 + parameter의 값이 들어갑니다.
즈즈즈즈즈즈으으으으으으윽ㄱ그그그ㅡ그극
즉!
return 값에 parameter 값 + return 값이 들어가 버리는 겁니다.
//동네가수
ArrayList<Music> artistsongs;
Collections.copy(artistsongs, getArtist(allsongs));
쓰니 null pointer Error 가 납니다. OTL
이런시긍로
2011.02.14 17:23:39
Collections.copy(src,dest) 로 하니 동작합니다.
그런데 문제가 있습니다.
좀 더 자세히 정리 해 드리면
gotcha 함수의 역할은 중복 값을 제거 하는 겁니다. 그래서 allsongs에는 219개의 row( column?!?) 이 있고
중복 제거후 159개의 값이 나옵니다.
gotcha 함수안에서는 그와같이 잘 나옵니다. parameter에는 219개의 값이 들어 있고
return 하려는 결과 값에는 159개 가 들어있습니다.
그런데 나와서 collentions.copy 를 해보면 artistsongs 에는 159개의 값이 들어가 있어야 할 터인데
219개 가 들어가 있습니다.
이것참.. 귀신이 귀곡산장할 노릇입니다.
4명이서 모서리에서 한명씩 자면서 불침번을 서서 한명씩 깨우고 그 자리에서 자기로 했는데
아침에 모두 다 살아 남았다는 이야기 처럼 말이죠
돌아가면서 깨우려면 5명이 필요하죠.
오싹
2011.02.14 17:27:27
이럴수가!! 이럴수가!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
문제는 다른데 있엇군요
gotcha 함수를 복사해서
두개 만들엇습니다.
gotcha gotcha1 이렇게
그런데 사용되는 함수들이 살짝 다르죠.
거기서 okokok 를 okokok1으로 바꿧어야 됐는데 안 바꿔서 okokok에 그 값이 들어가 버린 겁니다.
왜냐하면 okokok 가 전역에도 있고 지역에도 둘다 있는데
위의 예에서 보면 ok 를 전역으로도 설정하고 지역으로도 설정한 꼴이 된 거죠.
그래서 gotcha1 에서 okokok를 okokok1으로 안 바꾸는 바람에 전역 ok에 값이 들어가 버려서
꼬여 버린겁니다.
정리) 전역 list를 사용했기 떄문입니다. "Collections.copy(src,dest)" 잘 동작합니다.
감사합니다.
2011.02.14 17:39:04
저도 참.. 설레발이 심하군요. 허허허허
Collections.copy(dest, src) 인지도요.. 잘 모르겠습니다. ㅠㅠ 되는 줄 알았는데 안되는 거였군요( 에러 고치고 해보니 안되네요.)
그냥 mg2000님 말씀처럼 하니 됩니다.
저도 참 성격이 급하네요;




gotcha에서 리턴을 하는데, 왜 ok에서 인스턴스를 생성하는지 모르겠군요.
gotcha에서는 객체를 어떻게 생성해서 리턴을 하시는지?