본문 바로가기
Android (Kotlin)/mini projects

[Calculator] 계산기 만들기 lv.2.0

by 키윤 2023. 11. 29.

Lv2 :
Lv1에서 만든 Calculator 클래스에 출력 이후 추가 연산을 가능하도록 코드를 추가하고, 연산 진행 후 출력하기

으쌰으쌰하면서 코드를 작성했는데 마지막에 엄청난 실수를 발견하고 말았다..

1. 초반에 코드를 작성했을 때 0번째 2번째 4번째 등등 짝수번째 인덱스에는 숫자가 들어가고 홀수번째 인덱스에는 연산자가 들어갈 것이라고 가정하고 문제 풀이를 했다. 문제는 숫자의 자릿수가 2개 이상일 수도있다는걸 간과했다.. 하핳
전에 알고리즘 문제를 풀면서 map을 이용해서 숫자랑 문자열을 분리하여 저장하는 코드를 본 적이 있는거 같은데 내일 한번 찾아봐야겠다.. 그래도.. 한자릿수 연산 한정 작동하는 코드이다 .. !!

2. 추가 계산 부분을 메소드로 만들어서 빼보려고 했지만 어딘가 잘못 됐다. 갑자기 3*4-1의 값이 12.0이라고 한다... 내일 실수한 부분을 찾거나 원래 있었던 코드를 그대로 두어야겠다.

package com.example.mycalculator
// Level 2
// Lv1에서 만든 Calculator 클래스에 출력 이후 추가 연산을 가능하도록 코드를 추가하고, 연산 진행 후 출력하기
fun main(){
    print("빈칸 없이 식을 작성하세요 ('+', '-', '*', '/') : ")
    var stringInput = readLine()!!.toCharArray()

    // 첫번째 계산
    var operator = stringInput[1]
    var number1 = stringInput[0].digitToInt().toDouble()
    var number2 = stringInput[2].digitToInt().toDouble()
    var finalResult = calculation(number1, number2, operator)

    // 계산 반복
    finalResult = additionalCalculation(stringInput, finalResult, 3)

    println("계산 결과는 $finalResult 입니다.")

    // 추가 계산
    while (true) {
        print("추가적인 계산을 하시겠습니까? (yes/no) : ")
        var readIteration = readLine()!!
        when (readIteration) {
            in "no" -> break
            in "yes" -> {
                print("추가 연산을 작성하세요 : Ans")
                stringInput = readLine()!!.toCharArray()
                finalResult = additionalCalculation(stringInput, finalResult, 0)
                println("계산 결과는 $finalResult 입니다.")
            }
        }
    }
}
fun calculation(number1: Double, number2: Double, operator: Char): Double {
    var result = 0.0
    when (operator) {
        in "+" -> result = number1 + number2
        in "-" -> result = number1 - number2
        in "/" -> result = number1 / number2
        in "*" -> result = number1 * number2
    }
    return result
}

fun additionalCalculation(stringInput: CharArray, finalResult: Double, startIndexValue: Int): Double{
    if (stringInput.size >= 3) {
        for (i in startIndexValue until stringInput.size step 2) {
            var operator = stringInput[i]
            var number2 = stringInput[i + 1].digitToInt().toDouble()
            var finalResult = calculation(finalResult, number2, operator)
        }
    }
    return finalResult
}