내일배움캠프

본 캠프 12일차

끼ggi 2023. 12. 5. 21:28

알고리즘 보다는 일단 문법을 좀더 이해 하기 위해 계산기 과제를 좀 더 뜯어 보았다.

fun main() {
    println("계산기")
    println("숫자를 입력하시오")
    var num1 = readLine()!!.toDouble()
    println("연산자를 입력하시오")
    var opp = readLine()!!.toString()
    println("숫자를 입력하시오")
    var num2 = readLine()!!.toDouble()

    var cacl = Calculator()
    var result = 0.0

    if (opp == "+") {
        result = cacl.add(num1, num2)
    } else if (opp == "-") {
        result = cacl.minus(num1, num2)
    } else if (opp == "*") {
        result = cacl.multiple(num1, num2)
    } else if (opp == "/") {
        result = cacl.divide(num1, num2)
    }else if (opp == "%") {
        result = cacl.remainder(num1, num2)
    }else {
        println("다시 적으시오")
    }

    println("결과는 $result 입니다")

    println("여기서 더 계산 하시려면 [1]번을, 종료하시려면 [2]번을 선택하시오.")

    var num3 =readLine()!!.toInt()


    if (num3 == 1 ) {
        println("연산자를 입력하시오")
    }else {
        println("종료합니다.")
    }

    var opp2 = readLine()!!.toString()
    println("숫자를 입력하시오")
    var num4 = readLine()!!.toDouble()

    var final = 0.0

    if (opp2 == "+") {
        final = cacl.add(result,num4)
    } else if (opp2 == "-") {
        final = cacl.minus(result,num4)
    } else if (opp2 == "*") {
        final = cacl.multiple(result,num4)
    } else if (opp2 == "/") {
        final =  cacl.divide(result,num4)
    }else if (opp2 == "%") {
        final = cacl.remainder(result,num4)
    }else {
        println("다시 적으시오")
    }

    println("결과는 $final 입니다")



}

class Calculator {

    fun add (num1: Double,num2: Double) = num1 + num2
    fun minus (num1: Double,num2: Double) = num1 - num2
    fun multiple (num1: Double, num2: Double) = num1 * num2
    fun divide (num1: Double, num2: Double) = num1 / num2
    fun remainder (num1: Double,num2: Double) = num1 % num2
}

lv1 단계에서 조금 더 나가서 추가 계산까지만 완성 되었다.

이게 어제 튜터님께 찾아가서 나온 코드이다.

이제 여기서 lv2가 되기 위해 추가 연산이 계속 되게끔 while문을 이용해 보도록하자.

 

열심히 while에 대해서 강의 자료와 naver, 그리고 구글을 통해 while은 

while (조건) {

         소스코드가 들어가는데 if문을 쓰면 되는듯 하다.

}

 

근데 먼저 while을 어디에 놓느냐부터 막혔다. 일단 계속 계산도 되야 하고 중간에 for문에서 나오는 break나 continue 같은거로 탈출도 해야하고...맨위 첫 계산부터 놓았더니 추가 계산이 안된다...

그래서 우선 첫 계산은 냅두고 "여기서 더 계산~..." 부분부터 while을 집어 넣었다. 근데 또 문제는 조건식을 뭘로 놓아야 할지 생각하다가 우선 true로 넣고 틀리면 나오는 오류를 통해 힌트를 좀 얻어볼까 하고 넣어보았다.

    while (true) {


        println("여기서 더 계산 하시려면 [1]번을, 종료하시려면 [2]번을 선택하시오.")

        var num3 = readLine()!!.toInt()


        if (num3 == 1) {
            println("연산자를 입력하시오")
        } else {
            println("종료합니다.")
            break
        }

우선 여기까지는 출발이 좋다.

이제 결과 다음에 1번을 누르면 더 계산을 쭉 하고 2번이 아니라 다른버튼을 눌러도 종료한다. 위에 문장으 바꿔야겠다.

fun main() {
    println("계산기")
    println("숫자를 입력하시오")
    var num1 = readLine()!!.toDouble()
    println("연산자를 입력하시오")
    var opp = readLine()!!.toString()
    println("숫자를 입력하시오")
    var num2 = readLine()!!.toDouble()

    var cacl = Calculator()
    var result = 0.0

    if (opp == "+") {
        result = cacl.add(num1, num2)
    } else if (opp == "-") {
        result = cacl.minus(num1, num2)
    } else if (opp == "*") {
        result = cacl.multiple(num1, num2)
    } else if (opp == "/") {
        result = cacl.divide(num1, num2)
    }else if (opp == "%") {
        result = cacl.remainder(num1, num2)
    }else {
        println("다시 적으시오")
    }

    println("결과는 $result 입니다")

    while (true) {


        println("여기서 더 계산 하시려면 [1]번을, 종료하시려면 다른 키를 누르시오.")

        var num3 = readLine()!!.toInt()

        var num6 = result

        if (num3 == 1) {
            println("연산자를 입력하시오")
        } else {
            println("종료합니다.")
            break
        }

        var opp2 = readLine()!!.toString()
        println("숫자를 입력하시오")
        var num4 = readLine()!!.toDouble()



        if (opp2 == "+") {
            result = cacl.add(num6, num4)
        } else if (opp2 == "-") {
            result = cacl.minus(num6, num4)
        } else if (opp2 == "*") {
            result = cacl.multiple(num6, num4)
        } else if (opp2 == "/") {
            result = cacl.divide(num6, num4)
        } else if (opp2 == "%") {
            result = cacl.remainder(num6, num4)
        } else {
            println("다시 적으시오")
        }

        println("결과는 $result 입니다")
        continue
    }



}

class Calculator {

    fun add (num1: Double,num2: Double) = num1 + num2
    fun minus (num1: Double,num2: Double) = num1 - num2
    fun multiple (num1: Double, num2: Double) = num1 * num2
    fun divide (num1: Double, num2: Double) = num1 / num2
    fun remainder (num1: Double,num2: Double) = num1 % num2
}

원래 밑에도 final을 그대로 가져왔었는데 그러니 답이 자꾸 이상하게 나와버렸다.

그래서 위에서 부터 쭉 내려와서 가져오려고 result를 바꾸지않고 계속 내려서 num6이라는 값에 넣었다. 그래서 계산은 num6을 넣어서 계산하고 result값이 바뀌게 밑에다가 넣어서 만들었다. 드디어 된다.

그런데 분명 연산자에 다른키가 들어가면 "다시 적으시오" 가 나와야하는데 나오질 않고 그대로 그전 결과값이 튀어나온다. continue랑 break를 둘다 봤는데 위 괄호에 넣으니 오류가 뜨고 딱 저자리가 오류가 뜨지 않았다. 일단 오류가 뜨지 않으니 돌려보았는데 드디어 연산자 말고 다른키가 입력되면 다시 적으라는 말과 함께 다시 되돌아가졌다.

다시 이전 결과값 창으로 이동하고 다시 연산자를 입력하라고 나오는 모습이다.

일단 드디어 lv2까지는 어찌저찌 완성을 했다. lv3도 일단 도전해보긴 해보자...