*import java.util.*
fun main() {
val random = Random()
val list = mutableListOf<Int>()
while (list.size<6){
val randomNumber = random.nextInt(45)
if (list.contains(randomNumber)){
continue
}
list.add(randomNumber)
}
println (list)
}
-----------------------------------------------------------------------------------
//list를 사용할 경우 중복을 방지하기 위해 예외처리를 해야한다.
import java.util.*
fun main() {
val random = Random()
val numberSet = mutableSetOf<Int>()
while(numberSet.size<6){
val randomNumber = random.nextInt(45)+1
numberSet.add(randomNumber)
}
println (numberSet)
}
-----------------------------------------------------------------------------------
//set의 긍정적인 사용 예시
import java.util.*
fun main() {
val random = Random()
val list = mutableListOf<Int>().apply{
for (i in 1..45){
this.add(i)
}
}
//shuffle()을 이용하여 리스트를 섞어주는것
list.shuffle()
//subList를 이용해서 인덱스 0~6까지 뽑아주는 과정
print(list.subList(0,7))
}
-----------------------------------------------------------------------------------
//이번 챕터에서 사용할 리스트
리사이클러뷰나 어떤 연관된 값들을 보여줄때 자주 사용된다.
// 이 클론코딩의 경우 텍스트뷰가 타겟이다.
// 리스트를 하나 만든다. 그 안의 내용물들은 텍스트뷰가 들어갈 예정이다.
private val numberTextViewList : List<TextView> bylazy{
listOf<TextView>(
findViewById(R.id.firstNumberTextView),
findViewById(R.id.secondNumberTextView),
findViewById(R.id.thirdNumberTextView),
findViewById(R.id.fourthNumberTextView),
findViewById(R.id.fifthNumberTextView),
findViewById(R.id.sixthNumberTextView)
)
}
//어떤 버튼을 클릭시 리스트 안에 들어있는 값들을 위의 텍스트뷰 리스트에 차례대로 뿌려줄 예정이다
runButton.setOnClickListener{
val list = getRandomNumber()
didRun = true
//forEachIndexed를 이용하여 하나씩 받는다.
list.forEachIndexed{index,number->
val textview = numberTextViewList[index]
textview.text= number.toString()
textview.isVisible= true
}
}
forEach와 forEachIndexed
forEach
특정 리스트가 주어졌을때 그 리스트의 사이즈 만큼 for문을 돌리고 싶을때 주로 사용한다. 해당 element들에 대하여는 it으로 받을 수 있다.
만약 특정경우에 for문을 탈출하고 싶으면 break대신 조건부분에 return값을 넣고 @forEach를 이용하여 탈출한다.
forEachIndexed
기본적인 내용은 forEach와 동일하다. 추가적으로 리스트의 value 뿐만 아니라 해당 value의 index까지 사용할 수 있으며 index,value순서로 받는다.
index와 value는 원하는 변수명에 따라 이름을 바꿀 수 있다.
//버튼을 클릭시 예외처리를 해준다. 예외처리는 언제나 중요하므로 나올떄마다 케이스별로 정리하자.
//addButton 예외처리 상황들
addButton.setOnClickListener{
//만일 초기화가 되어있지 않고 이미 run을 한 상황
//didRun이라는 Boolean을 하나 설정한다. 상태를 관리할때 주로 사용한다.
if (didRun){
Toast.makeText(this,"초기화 후 시도해주세요",Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
//내가 선태한 번호가 5개 이상일때
if (pickNumberSet.size>=5){
Toast.makeText(this,"번호는 5개까지만 선택할 수 있습니다.",Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
//만약 중복된 번호를 추가하려고 할때
if (pickNumberSet.contains(numberPicker.value)){
Toast.makeText(this,"이미 추가된 번호입니다.",Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
val textView = numberTextViewList[pickNumberSet.size]
//PickNumberSet을 이용하여 매번 마지막 인덱스의 텍스트뷰를 보여준다.
textView.isVisible= true
textView.text= numberPicker.value.toString()
pickNumberSet.add(numberPicker.value)
}
clearButton.setOnClickListener{
pickNumberSet.clear()
didRun = false
numberTextViewList.forEach{
it.isVisible= false
}
}
//모든 예외처리 상황에서 만일 예외케이스에 걸린다면 Toast를 띄워주고 return@SetOnClickListener로 빠져나온다.