e:java.lang.NumberFormatException 예외를 예외처리하고 싶어서 try-catch를 열심히 써 봤는데 예외처리가 안되는 문제가 있었다.
try - catch 문에 대한 이해가 부족했다. try문 안에는 예외가 발생하는 지점이 들어가야 한다. 만약 정수를 넣는 인풋을 구현했는데 그 인풋을 예외처리하고 싶다면, try문 안에 그 인풋을 구현한 코드가 들어가야 한다는 것.
처음으로 튜터분께 질문을 드렸다. 내가 이해하지 못한 부분 뿐 아니라, 이 문제와는 관계가 없어도 코틀린 문법이 어떻게 적용되는지에 대한 추가적인 내용도 알려주신 점이 굉장히 좋았다.
(물론 당장은 어디 써먹는 것이 좋을 지 감이 안와서, 좀 더 공부를 해봐야 할 듯하다.)
var selectCalc= readLine()!!.toInt()
val selectCalc: Int
try {
selectCalc= readLine()!!.toInt() /
}
catch (e:java.lang.NumberFormatException){
println("숫자를 입력해 주시기 바랍니다.")
continue
}
continue가 들어간 이유는 이 코드의 상단에 반복문이 들어가서
정수끼리 더했는데도 자꾸 소수가 출력되는 것이 너무 거슬려서, 정수는 정수처럼 표현하고 싶었다.
입력값을 Double로 받았기 때문에 출력도 Double로 된다. 그러니까 3.0, 7.0 이렇게 출력되는 것인데
정수는 정수처럼 보이고, 실수는 실수처럼 소수점이 표현되게 하고 싶었다.
정수와 실수를 다음과 같이 구분해주었다.
num1 * 10 % 10 == 0.toDouble()
어떤 수에 10을 곱한 후, 10으로 나눈 나머지가 0인 수를 정수로 정의하였다.
예를 들어 123이라는 숫자와 100.1 이라는 숫자가 있다고 가정하자.
123과 10을 곱하면 1230이고, 이를 10으로 나누면 123에 나머지의 값은 0이다.
100.1과 10을 곱하면 1001이고, 이를 10으로 나누면 100이고 나머지의 값은 1이다.
num1의 자료형은 Double이므로 비교를 위해 상수 0의 자료형을 Double로 바꿔주었다.
조건을 주기 위해 if문을 사용했으며 덧셈, 곱셈, 뺄셈의 경우의 수는
정수와 정수의 연산 = 정수
정수와 실수의 연산 = 실수
실수와 정수의 연산 = 실수
실수의 실수의 연산 = 정수 or 실수
이렇게 총 5가지가 나오므로 실수와 실수의 연산에는 조건문 내부에는 조건문을 주었다.
나눗셈은
정수 / 정수 = 정수 or 실수
정수 / 실수 = 정수 or 실수
실수 / 정수 = 정수 or 실수
실수 / 실수 = 수 or 실수
이렇게 총 8가지가 나오기 때문에 모든 연산의 조건문의 내부에 조건문을 주었다.