마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

자바 배열에서 중복제거하는거에서 질문드립니다!!ㅠㅠ

0 추천

코딩 공부를 시작했는데 아무리봐도 이해가 안되어서 질문드립니다..
이거때문에 며칠 머리터질거같습니다..
물론 다른 방법도 있겠지만 제가 쓴게 왜 잘 안되는지 모르겠습니다..ㅜㅠ
조금 번거러우시더라도 천천히 한번 읽어봐주세요..

지도에다가 좌표를 찍고 있다고 생각해주시면 좋을듯합니다.
Point 라는 클래스에는 x, y 값이라는 변수가 있습니다.
Point 객체들 중에 좌표가 중복되는 것들을 잡아내고있습니다. 

여기서 제가 중복 제거하는 코드는 이렇습니다.

(빨간줄은 급한대로 제가 아무 에디터나 열어서 쓴거라 의미없습니다.)

문제는 잘될때도 있고 안될때도 있다는겁니다..
로그를 찍어보니

(1,1) (2,1) (2,1) (2,1) (1,5) 이렇게 연속되 있으면 중복제거를 잘해서
(1,1) (2,1) (1,5) 이런 결과값을 내놓는데

(2,1) (1,1) (2,1) (1,5) (2,1) 이런식으로 연속되어있지않으면 중복제거를 안하고
(2,1) (1,1) (2,1) (1,5) (2,1) 이런 결과값을 내놓습니다.

마찬가지로 
(2,1) (1,1) (2,1) (2,1) (1,5) 이걸 집어넣으면
(2,1) (1,1) (2,1) (1,5 ) 이런 결과값을 내놓습니다.

선배님들 .. 도와주세요 ㅠㅠ !!

코로나 이겨내요 화이팅!!

김원장91 (1,470 포인트) 님이 2020년 6월 23일 질문

2개의 답변

0 추천
 
채택된 답변
1. 가운데 for문에서도 원본 어레이의 값으로 반복문을 돌려야 합니다.

2. i번째 항목과 같은 순서는 무조건 같을수밖에 없기 때문에 가운데 for 문에서 j == i인 시점에는 비교하지 않도록 합니다.
익명사용자 님이 2020년 6월 23일 답변
김원장91님이 2020년 6월 23일 채택됨
0 추천

왜 저렇게 복잡하게 하죠? duplicate array에 없으면 넣고, 있으면 안 넣으면 되는거 아닌가요?

 

for (int i = 0; i < arrayPoint.size(); i++) {
  Point point = arrayPoint.get(i);
  if (!arrayRemoveDuplicate.contains(point)) {
    arrayRemoveDuplicate.add(point);
  }
}

 

쎄미 (162,410 포인트) 님이 2020년 6월 23일 답변
쎄미님이 2020년 7월 2일 수정
답변 감사합니다~! 근데 사실 arraylist 말고 set쪽으로해서 이미 해결은 지었습니다. 다만 제가 공부하는 과정이다보니 제 소스가 왜 안되는지 궁금했었습니다.

답은 안에있는 for문에서 중복되면  isDuplicated = true를 주고 바로 for문을 빠져나와야 한다고 합니다.
...