[우테코] 1주차 프리코스 회고 및 오류 해결 방법

etc-image-0

ApplicationTest.kt에서 실행을 하면 

etc-image-1
위와 같이 떠야 한다!
etc-image-2
터미널에서 해당 명령어를 입력하면
etc-image-3
BUILD SUCCESSFUL 까지 뜨면 완!

이제 test를 성공했으면, 우테코 홈페이지에 들어가서 코드를 실행하면 되는데, 자꾸 빌드가 안되었다는 이유로 예기치 못한 오류라고 떴다.알고 보니 오류가 커밋하다가 application.kt 코드에 '9'가 어쩌다보니 잘못 입력되어 있었던 것.ㅋㅋ지우고 다시 커밋하니까 ! 테스트 코드가 실행이 되었다.

 

회고

이제 2,3,4 주차가 되면 요구사항도 훨씬 많고 어렵다는데 단단히 준비를 해야할 듯 싶다.우테코 오픈채팅 방에 들어갔는데, 다들 열정이 넘치신다.다른 분들 github 코드도 보는데 다들 넘사벽...앞으로 코드를 구현할 때마다 커밋을 계속 해야겠다! ㅎㅎ.아직 github 사용법이 익숙하지는 않지만 꾸준히 해나가야겠다.

 

오류 2개

1) org.opentest4j.AssertionFailedError: Expected java.lang.IllegalArgumentException to be thrown, but nothing was thrown.

etc-image-4

Exception 발생이 있을거라 생각을 했는데~ but nothing was thrown... 발생하지 않았다고 한다.

 

https://yeonyeon.tistory.com/168

 

[Java] org.opentest4j.AssertionFailedError: Expected ... to be thrown, but nothing was thrown. 에러

에러: org.opentest4j.AssertionFailedError: Expected java.lang.IllegalArgumentException to be thrown, but nothing was thrown. 📜 에러 설명 Exception 발생이 있을거라 생각을 했는데~ but nothing was thrown... 발생하지 않았다고 한

yeonyeon.tistory.com

try-catch 부분을 없애고 다른 방법이 있냐고 물어봄 GPT 한테

 

GPT 답 : 예외 처리를 try-catch 대신 다른 방식으로 수행할 수 있습니다. Kotlin에서는 try-catch 외에도 함수의 반환 값으로 예외를 처리할 수 있는 방법이 있습니다. 예를 들어, getUserGuess 함수에서 예외를 throw 하는 대신 예외를 반환 값으로 처리하는 방식을 사용할 수 있습니다. 이렇게 하려면 함수 시그니처를 변경해야 합니다.

val playerGuess = getUserGuess()
        if (playerGuess is IllegalArgumentException) {
            println("${(playerGuess as IllegalArgumentException).message} 애플리케이션을 종료합니다.")
            return
        }

이런식으로 접근했더니 오류가 사라짐 !

 

main 함수, 입력받는 함수 일부 中

fun main() {
    val computer: MutableList<Int> = mutableListOf()
    while (computer.size < 3) {
        val randomNumber = Randoms.pickNumberInRange(1, 9)
        if (!computer.contains(randomNumber)) {
            computer.add(randomNumber)
        }
    }
    println("숫자 야구 게임을 시작합니다.")

    var isGameWon = false

    while (!isGameWon) {

        val playerGuess = getUserGuess()
        if (playerGuess is IllegalArgumentException) {
            println("${(playerGuess as IllegalArgumentException).message} 애플리케이션을 종료합니다.")
            return
        }
            val result = evaluateGuess(playerGuess, computer)
            println(result)

            if (result == "3스트라이크") {
                println("3개의 숫자를 모두 맞히셨습니다! 게임 종료")
                isGameWon = true

                if (playAgain()) {
                    isGameWon = false
                    computer.clear()
                } else {
                    println("게임을 완전히 종료합니다.")
                }

            }


    }
}

fun getUserGuess(): List<Int> {
    print("숫자를 입력해주세요 : ")
    val input = Console.readLine() ?: ""
    if (input.length != 3 || input.toSet().size != 3 || !input.all { it.isDigit() }) {
        throw IllegalArgumentException("잘못된 입력입니다. 1에서 9까지의 서로 다른 숫자 3개를 입력하세요.")
    }

    return input.map { it.toString().toInt() }
}

 

2) java.lang.IllegalArgumentException: 잘못된 입력입니다. 1에서 9까지의 서로 다른 숫자 3개를 입력하세요.

etc-image-5

이 오류는 다시 시작할 때, 컴퓨터 랜덤값도 새로 설정해주고 했어야 했는데, 안해서 오류가 났던 것.

다시 시작할 때, 컴퓨터 랜덤값을 다시 설정했더니 오류가 사라졌다!

 

etc-image-6