Kotlin
[Kotlin] Array
hvoon
2022. 9. 14. 15:22
// 1.
// 코틀린 배열생성은 arrrayOf를 자주 이용함
val array1 = arrayOf(10, 20, 30 , 40, 50)
println("1. array1: $array1") // 클래스 이름과 해쉬코드 등이 출력됨
// 2.
// 배열의 요소들을 한번에 출력하려면 contentToString 함수 사용
println("2. array1: ${array1.contentToString()}")
// 3.
// 코틀린의 배열은 일단 자료형의 제약이 없어서 자바의 리스트 등처럼 여러 자료형데이터를
// 자료형 데이터를 하나의 배열에 넣어서 사용할 수 있음.
// 다만 그것이 권장할 만한 동작은 아니기에 자료형을 제한하는 코드가 제공되어 사용됨
// 자료형 제약없이 사용
val array2 = arrayOf(100, 11.11, "문자열", true)
println("3. array2: ${array2.contentToString()}")
// 4.
// 하나의 자료로 제한하여 사용
val array3 = intArrayOf(10, 20, 30, 40, 50)
// 기본 자료형은 ArrayOf 앞에 자료형을 붙여쓰고
val array4 = doubleArrayOf(11.11, 22.22, 33.33, 44.44, 55.55)
val array5 = arrayOf<String>("문자열1", "문자열2", "문자열3")
// 객체형 자료는 제네릭 사용함
println("4. array3: ${array3.contentToString()}")
println("4. array4: ${array4.contentToString()}")
println("4. array5: ${array5.contentToString()}")
// 5.
// 0 다섯개가 채워진 배열 생성
var array6 = Array( 5, {0})
// 다섯개의 널이 채워진 배열, 코틀린 변수는 널을 허용하지 않는 것이 기본
// 그러므로 이와 같이 ?를 넣어야 널값을 저장 가능
var str = Array<String?>( 5, {null})
println("5. array6: ${array6.contentToString()}")
println("5. str: ${str.contentToString()}")
// 6.
print("6. ")
for(item in array1){ // 배열을 이용한 반복실행문 실행
print("$item\t")
}

println("첫번째 값: ${array1.first()}")
println("마지막 값: ${array1.last()}")
println("30의 위치: ${array1.indexOf(30)}")
println("평균: ${array1.average()}")
println("합: ${array1.sum()}")
println("개수: ${array1.count()}")
println("개수: ${array1.size}")
println("30을 포함하는가: ${array1.contains(30)}")
println("1000을 포함하는가: ${array1.contains(1000)}")
println("30을 포함하는가: ${30 in array1}")
println("1000을 포함하는가: ${1000 in array1}")
val array12 = arrayOf(5, 1, 3, 7, 10, 8)
val array13 = array12.sortedArray()
val array14 = array12.sortedArrayDescending()
println("array13: ${array13.contentToString()}")
println("array14: ${array14.contentToString()}")

요일 출력
fun main(){
print("연도 입력: ")
val year: Int = readLine()!!.toInt()
print("월 입력: ")
val month: Int = readLine()!!.toInt()
print("일 입력: ")
val day: Int = readLine()!!.toInt()
var days:Int=sumdays(year, month, day)
val temp:Int=days%7
val weekday:String = selectWeekday(temp)
println(weekday)
}
fun sumdays(year:Int, month:Int, day:Int):Int{
var days=0
val mdays = arrayOf(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
if((year%4 ==1)&&(year%100!=0)||(year%400==0)) mdays[2]=29
days = (year-1)*365
val y:IntRange = 1 .. (year-1)
for(i in y){
if((i%4 ==1)&&(i%100!=0)||(i%400==0)) days++
}
var i:Int=0
while(i<month){
days += mdays[i]
i++
}
days += day
return days
}
fun selectWeekday(t:Int):String = when(t) {
1->"월요일"
2->"화요일"
3->"수요일"
4->"목요일"
5->"금요일"
6->"토요일"
0->"일요일"
else -> "잘못된 연산입니다"
}
