일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- android 터치시 뒤집히는 뷰
- 정국라면레시피
- 라면레시피추천
- 애드몹 설정
- 앱에 광고달기
- 안드로이드 뒤집히는 뷰
- 국제우편물
- 안드로이드
- android remoteconfig
- android 광고달기
- RecyclerView in Admob
- 안드로이드 광고
- 정국라면
- android kotlin
- 불그리레시피
- android notification
- 우편물재난문자
- android 뒤집히는 카드뷰
- 안드로이드 리스트뷰와 광고
- firebase RemoteConfig
- Android AdMob
- 앱 광고 설정
- android 수익
- 앱에 광고 수익
- kotlin
- FlipView
- android 앱업데이트 없이 변경하기
- Android
- 테러우편물
- android 영단어 기능 만들기
- Today
- Total
TAE
[kotlin] 랜덤함수 Random() _ 중복제거 본문
Ramdom() 함수는 무작위한 값을 추출하는 함수입니다.
함수의 인자로 Seed값이 들어가는데 이 값을 랜덤으로 만들어줘야, 랜덤값이 함수를 통해 나오게 됩니다.
만약 Ramdom(10) 으로 시드값을 10으로 정하면 같은 시드값이 들어가 같은 숫자값이 나오게 됩니다.
Seed값으로 millisecond(밀리초) 나 nanosecond(나노초) 를 사용하면 같은 값이 거의 나오지않는 랜덤값이 나오게 됩니다.
seed값을 정하지 않은 Ramdom 함수를 보게되면 seed값으로 seedUniquifier() ^ System.nanoTime() 를 사용하는것을 알 수 있습니다.
- 랜덤함수(중복가능)
val random = Random() // 시드값 넣지 않음
for (i in 1..5){
print("${random.nextInt(10)+1}")
}
1~10까지 5개의 무작위한 랜덤값을 추출하는 방법은
위와 같이 랜덤함수를 선언 한후 for문을 사용하여 5개의 숫자를 추출합니다.
nextInt 를 사용해서 1~10 까지 의값중에 하나의 숫자를 추출하게 됩니다.
시작값이 0이므로 +1 을 하지않으면 0~9까지 출력이 됨으로 1~10 까지 랜덤으로 출력하기위해 +1을 해줍니다.
- 랜덤함수 (동일값 제거 contains 사용)
위와같이 랜덤함수를 구현할 경우 중복된 값이 나오게 될 수있는데 이 중복된 값을 제거하기 위해 contains을 사용하여 동일값이 있는지 없는지 여부를 판단후 list에 add하는법을 알아보자
val random1 = Random()
val list = mutableListOf<Int>()
while (list.size < 6) {
val randomNumber = random1.nextInt(45) + 1
if (list1.contains(randomNumber)) { //contains 리스트에 값이 있는지 없는지 여부 판단
continue //동일값이 있다면 건너뛰기
}
list1.add(randomNumber)
}
println(list)
리스트를 mutableListOf로 선언한 후.(List 이지만 수정, 삭제가 가능한(Mutable) 한 리스트)
while문을 통해 리스트의 사이즈가 6이 될때까지 while문을 실행한다.
랜덤함수로 1~45 까지 랜덤값을 가져온후 if문에서 contains 를 통하여 리스트에 랜덤한 값이 있는지 없는지를 검사한다.
이미 동일한값이 리스트에 있으면 true를 반환하여 contiue가 실행되어 아래 구문이 실행되지않고 다시 while문을 실행하게된다.
동일한 값이 없으면 list에 값을 add 하여 중복되지 않은 리스트값을 list에 넣어 사용할수있다.
-랜덤함수 (동일값 제거 set사용)
contains 말고 mutableSetOf 를 사용하여 중복된 값 없이 랜덤한 숫자를 뽑을수도 있다.
val random1 = Random()
val numberSet = mutableSetOf<Int>()
while (numberSet.size < 6) {
val randomNumber = random1.nextInt(45) + 1
numberSet.add(randomNumber)
}
println(numberSet)
mutableSetOf 는 중복된 값을 제거하고 리스트에 담아준다고 생각하면 편할것같다.
위 코드처럼 if문으로 비교하지 않고 코드를 좀더 간결하고 보기쉽게 사용할수 있다.
- 랜덤값 출력 (랜덤함수 사용x , apply, shuffle 사용)
랜덤 함수를 사용하지않고 리스트에 해당 숫자를 add한 후 shuffle() 을 사용하여 숫자를 섞은 후 해당 리스트를 자르는 방법도 있다.
val list = mutableListOf<Int>().apply {
for (i in 1..45) {
add(i)
}
}
list.shuffle()
println(list.subList(0,6))
apply는 함수를 호출하는 객체를 이어지는 블록의 리시버로 전달하고, 객체 자체를 반환한다.
자세한건 다음에 다루도록 하고.. 쉽게 설명해서 list에 바로 접근 가능 하다고 생각하면 될것같다.
여기서 예를들면 3번째줄 add에 apply를 쓰지 않으면 list를 선언하고 list.add(i) 로 써야할것을 바로 접근하여 add(i)로 쓴다 라고 우선 생각하면 될것같다.
list를 변경가능한 mutableListOf 로 선언하고 for문을 사용해서 1~45까지의 숫자를 넣는다.
그후 list.shuffle() 를 사용하여 숫자를 무작위로 섞는다.
list.subList를 사용하여 list.subList(0 //시작점,6 //종료점) 0번에서 6번까지 리스트를 잘라 5개만 출력될수 있도록 한다.
랜덤한 값을 추출하는 방법은 많은것 같다.
자기 자신한테 맞는 방법으로 코드를 짜면 될것같다.
뭐니뭐니해도 자신이 보기 편한 소스가 최고인것같다..
'Kotlin > 개념' 카테고리의 다른 글
[kotlin] 반복문 for문 (0) | 2021.09.09 |
---|---|
[kotlin] android Kotlin과 java 사용(startActivity, setOnClickListener) (0) | 2021.09.09 |