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 -> "잘못된 연산입니다"
}