반응형
1에서 10 사이에 숫자를 랜덤으로 중복 없이 5개의 숫자를 뽑아내려면
여러 방법이 있지만 아마도 많이 쓰는 방법은...
public static void main(String[] args) {
int a[] = new int[5];
List<Integer> list = new ArrayList<>();
Random r = new Random();
for(int i=0;i<=4;i++)
{
a[i] = r.nextInt(10)+1;
for(int j=0;j<i;j++)
{
if(a[i]==a[j])
{
i--;
}
}
}
for (int value : a) {
list.add(value);
}
Collections.sort(list);
System.out.println(list);
}
위에 코드처럼 a에 Random을 이용해 1 ~ 10 사이의 값을 입력하면서 a에 중복 값이 있음 i의 증가를 빼서
다시 값을 받아와 또 중복검사... 이런 방법으로 중복 없이 1에서 10 사이의 값 5개를 가져옵니다.
하지만 한눈에 이해하기 힘든 구조입니다. 이 방법으로 사용해도 되지만
이해하기 쉬우며 더 간결하게 바꿔보면...
public static void main(String[] args) {
Set<Integer> set = new HashSet<>();
while (set.size() < 5) {
Double d = Math.random() * 10 + 1;
set.add(d.intValue());
}
List<Integer> list = new ArrayList<>(set);
Collections.sort(list);
System.out.println(list);
}
Set의 중복을 허용하지 않는 특성을 이용해 더 간결하게 만들어 봤습니다.
set.size()가 5보다 크면 while문이 반복을 끝내는 구조인데
Math.random을 이용해 1~10 사이의 랜덤 값을 set에 저장합니다.
만약 같은 값이 들어오면 set은 저장을 하지 않으므로 set.size()가 증가하지 않으니 while문은 5보다 클 때까지
돌게 되는 구조입니다.
마지막으로..
List<Integer> list = new ArrayList<>(set);
Collections.sort(list);
생성된 숫자들을 배열에 넣어 sort 까지 해주면 깔끔하게 끝~
위에 코드보다 간결하며 이해하기 쉬운 구조가 아닌가 생각해 봅니다.
더 좋은 코드가 있음 댓글에 남겨 주세요..
초보탈출 그날까지 쭉~
반응형
'Android Studio' 카테고리의 다른 글
안드로이드 카드 뒤집기 - Android Flip Animation (0) | 2019.12.11 |
---|---|
숫자 (배열) 랜덤 섞기 - JAVA (0) | 2019.12.09 |
Realm 다중 모델 사용하기 - Android (0) | 2019.11.20 |
안드로이드 비슷한 기능의 여러 버튼 한번에 처리 - Resource (0) | 2019.10.29 |
파이어베이스 - 쿼리 커서로 데이터 페이지화 (0) | 2019.06.25 |