외우지말고 이해하라.

외우는 것 보단 이해해서 내것으로 만들어 활용하기

Another-Develop/kotlin

02 코틀린 - readLine (자료형변환) , 배열

hyg4196 2021. 4. 16. 13:50
반응형

1. readLine()

   출력이 print 라면 입력을 받는 명령어 

 

자료형 변환

 

 ! readLine()에 변환 사용 할때 주의할 점은 Null 값이 들어 왔을때 오류 없이 처리 해주기 위해 여러 표시를 해줘야함

//  val num01 = readLine().trim().toInt() -> 오류 : null 일시 trim() 에서 문제가 발생함으로 ? 를 붙여 null 일경우도 처리해준다
    val num01 = readLine()?.trim()?.toInt()

// ? 이랑 비슷한 기능 , !!으로 null이 아니다 라고 선언
    val num02 = readLine()!!.trim().toInt()

//  ( A  ?:  B )   오류가 없으면 A 오류가 있으면 B 실행
    val num03 = (readLine() ?: "").trim()?.toInt()

//  앞에 명령어들이 실패시 0 , 성공시 앞에 데이터를 입력
    val num04 = readLine()?.trim()?.toInt() ?: 0

 

!! 나 ? 를 이용하거나 엘비스 연산자를 이용하여 처리해주어야 오류가 없다.

 

 

 

2. 배열

 

arrayOf 를 사용

val array = arrayOf(10,20,30)

배열 객체는 Int , Long , Char 등과 같은 기본 타입 뒤에 Array를 붙여서 생성 가능

 var numbers = IntArray(10)

 

참고) szie 를 이용해 배열 크기를 가져올수 있음 [array.size]

 

전체 코드

fun main() {
    println("=== readline 시작 ===")
    println("숫자 : ")
//  val num01 = readLine().trim().toInt() -> 오류 : null 일시 trim() 에서 문제가 발생함으로 ? 를 붙여 null 일경우도 처리해준다
    val num01 = readLine()?.trim()?.toInt()

// ? 이랑 비슷한 기능 , !!으로 null이 아니다 라고 선언
    val num02 = readLine()!!.trim().toInt()

//  ( A  ?:  B )   오류가 없으면 A 오류가 있으면 B 실행
    val num03 = (readLine() ?: "").trim()?.toInt()

//  앞에 명령어들이 실패시 0 , 성공시 앞에 데이터를 입력
    val num04 = readLine()?.trim()?.toInt() ?: 0

    println(num01)
    println(num02)
    println(num03)
    println(num04)
    println()

    println("=== 배열 시작 ===")
    val array = arrayOf(10,20,30)

    println(array.size)

    for(i in array.indices){
       array[i] = i+10
    }
    val number01 = Number(array[0]);
    val number02 = Number(array[1]);
    val number03 = Number(array[2]);

    println("* 입력된 숫자")

    println(number01.outputNum())
    println(number02.outputNum())
    println(number03.outputNum())
}

class Number(var num:Int){
    fun outputNum ():Int = num
}

 

 

readLine() , class 사용 연습

 

fun main() {
    println(" === 작업장 ====")
    var person = Person()
    var cnt:Int = 0
    print("입장할 작업장을 선택하세요. (1~10) :  ")
    while(cnt==0){
        val input:Int = readLine()!!.trim().toInt()
        if(1<=input ){
            if(10>=input){
                println("${input} 작업장으로 입장합니다.")
                person.id = input
                cnt =1
            }else{
                println("입력값이 1~10 사이의 숫자인지 다시 확인하세요.")
            }
        }else{
            println("입력값이 1~10 사이의 숫자인지 다시 확인하세요.")
        }
    }

    print("나이를 입력하세요 : ")
    var input:Int = readLine()!!.trim().toInt()
    person.age = input

    print("이름을 입력하세요 : ")
    var inputS:String = readLine()!!.trim()
    person.name = inputS

    print("직업을 입력하세요 : ")
    inputS = readLine()!!.trim()
    person.job = inputS

    cnt = 0
    while(cnt==0){
        print("시급을 입력하세요 : ")
        val input:Int = readLine()!!.trim().toInt()
        if(8720>=input ){
            if(0<input){
                println("${input} 원으로 합의를 마칩니다.")
                println()
                person.pay = input
                cnt =1
            }else{
                println("악덕 사장이지만 시급이 0원인 건 좀 그렇다네요. 참 웃기는 일이네요 ㅎㅎ")
            }
        }else{
            println("작업장 사장은 최저 시급 이상으로는 줄수 없다고 말합니다. '당신의 직업이 뭐든 상관 없어요. 이곳에선 사장의 말이 곧 법입니다.'")
        }
    }



    println("입력이 완료 되었습니다. 작업을 시작합니다.")
    person.Introduce()
    println()
    while(cnt == 1){
        println("작업할 시간을 결정 하세요.  !! 시간을 -99 로 설정하면 작업장을 나갑니다. !!")
        input = readLine()!!.trim().toInt()
        if(input == -99){
            println("작업장을 나갑니다.")
            if(person.totalPay < 500000){
                println("그는 만족스럽지 못한 표정으로 떠납니다.")
            }else if(person.totalPay < 200000){
                println("그는 웃으면서 떠납니다.")
            }else if(person.totalPay > 5000000){
                println("그는 눈물을 흘리며 기쁜건지 슬픈건지 ... 그저 울면서 그곳을 떠납니다.")
            }else{
                println("그는 고개를 끄덕이며 떠납니다.")
            }
            break;
        }else if(input > 8){
            var time:Int = input
            var work = Work(time, person)
            work.doitNo()
            println()

            println("일을 마치고 울면서 휴식 시간을 가졌습니다.")
            println("ㅜㅜ")
            println("ㅠㅠ")
            println("ㅠㅠ")
            println("ㅠㅠ")
            println("ㅠㅠㅠㅠ")


            println("다시 작업장으로 복귀합니다.")

        } else{
            var time:Int = input
            var work = Work(time, person)
            work.doit()
            println()

            println("일을 마치고 휴식 시간을 가졌습니다.")
            println(".")
            println(".")
            println(".")
            println(".")
            println(".")


            println("다시 작업장으로 복귀합니다.")
        }

    }


}


class Person{
    var id:Int = 0
    var name:String = ""
    var age:Int = 0
    var job:String = ""
    var pay:Int = 0
    var totalPay:Int = 0
    fun Introduce() {
        println("${id}번 작업장에 들어온 사람은 ${age}살 ${name}씨 입니다.")
        println("${job} 직업을 가졌다곤 하는데, 그런건 상관없고 시간당 ${pay}를 받습니다.")
    }
}

class Work(var time:Int, var person:Person){
    fun doit(){
        println("${person.id} 번, ${person.age}살 ${person.name} 은(는) 작업을 무사히 마쳤다.")
        println("${time}시간 일을 했고 시간당 ${person.pay}원을 받는 ${person.name}씨는 ${time * person.pay}원을 받았다.")
        person.totalPay = person.totalPay+time*person.pay
        println("${person.name}은(는) 총 ${person.totalPay}원을 보유하고 있다.")
    }

    fun doitNo(){
        println("${person.id} 번, ${person.age}살 ${person.name} 은(는) 작업을 무사히 마쳤다.")
        println("${time}시간 일을 했고 시간당 ${person.pay}원을 받는 ${person.name}씨는 ${time * person.pay}원을 받아야하지만.....")
        println("악덕 사장이 초과근무는 인정할 수 없다면서 8시간만을 인정해주었다.. ${8*person.pay}원을 받았다....")
        person.totalPay = person.totalPay+8*person.pay
        println("${person.name}은(는) 총 ${person.totalPay}원을 보유하고 있다.")
    }
}

 

반응형