반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 연산자 우선순위
- 42000
- 스타일 시트
- 자바
- 카카오 로그인
- 테이블 생성
- 셀렉터
- 다음주소API
- 변경
- 인스턴스
- rest api
- 변수
- API
- jsp
- textarea
- 주소
- restAPI
- 카카오로그인
- 별찍기
- openChallenge
- id 개별 부여
- span width 설정
- 로그아웃
- 크기조정
- 반복문
- 유효성검사
- 로그인
- 없애기
- 회원가입페이지
- 조건문
Archives
- Today
- Total
뚜벅이 한걸음
Random 객체의 중복 제거 본문
반응형
랜덤으로 숫자를 가지고와서 숫자들의 중복을 제거하는 것은 해본적이 있다.
상황
: 현재 리스트에 저장되어있는 객체들을 모두가지고 와서 객체의 pk를 기준으로 9개를 뽑아내되, 중복을 제거한다.
해결
: 인덱스값은 int 이지만 그 숫자가 대표하는것은 객체이므로 배열을 선언하여 배열에 담는다.
//장소리스트 (장소객체가 담겨있다.)
List<PlaceVO> placeList = placeservice.selectPlace();
//랜덤한 순서로 배치된 장소들을 담을 새로운 배열
List<PlaceVO> randomList = new ArrayList<PlaceVO>();
Random random = new Random();
if(placeList.size() > 0) {
//인덱스 값을 담을 배열 생성
int[] idx = new int[9];
for(int i=0; i<idx.length; i++) {
if(i!=0) {
boolean flag = true;
while(flag) {
//새로운 수 생성
int randomNum = random.nextInt(placeList.size());
//기존의 배열에 새로 넣으려고 하는 randomNum이 있는지 비교
boolean checkSame = false;
for(int j=0; j<i; j++) {
if(idx[j]==randomNum) {
//이미 같은 값이 존재한다면 for문 나가서 while문 부터 다시 돌기
checkSame = true;
break;
}
}
//기존의 배열에 존재하지 않는 값이면 위의 for문을 나와서 아래의 if문을 탄다.배열에 그 값을 넣고 다시 첫번째 for 문으로 가기
if(!checkSame) {
idx[i] = randomNum;
flag = false;
}
}
//첫번째 값은 무조건 넣기 (i=0)
}else {
int randomNum = random.nextInt(placeList.size());
idx[i] = randomNum;
}
}
//인덱스 배열이 완성되면 장소 가지고 오기
for(int i:idx) {
System.out.println(i);
//장소 가지고 오기
PlaceVO randomPlace = placeList.get(i);
//넣기
randomList.add(randomPlace);
}
}
배운점 :
조건문은 조건식이 true일때 돈다. 따라서 checkSame이 현재 false이고 조건식은 (!false)가 되므로(true)이다.
따라서 if의 조건식이 true가 되므로 실행문을 타게된다.
이처럼 조건문안의 조건식을 만족시켜서 사용하는 것 뿐만 아니라 boolean 값을 두고,
그 값이 true이냐 false이냐로 돌릴 수도 있다.
반응형
'java' 카테고리의 다른 글
람다식과 향상된 for 문 (0) | 2022.08.02 |
---|---|
반복문 돌려 테이블 리스트 만들 때 id 값 다르게 부여하기 (2) | 2022.08.02 |
메모리 주소 값 (0) | 2022.07.12 |
메모리 구조 (0) | 2022.07.12 |
참조 자료형 (0) | 2022.07.10 |