숫자형태의 문자열을 숫자로 변환할 때, 숫자로 변환할 수 없는 문자열이기 때문에 생기는 에러입니다. 에를 들어 null, "", " ", "a", "a123" 등은 숫자형태의 문자열이 아니므로 변환을 하게되면 에러가 납니다.
실용적인 해결방법은 두가지 방향이 있을 것 같습니다.
사용자의 입력을 제한해서 숫자형태의 문자열만 입력받도록 하는 겁니다.
두번째는, 입력한 문자열을 숫자로 변환할 때 에러가 발생하면 에러를 잡아서 에러시에 메세지를 보여주던가 기본 숫자값을 사용하도록 하는 방법입니다.
첫번째 방법은 아래와 같은 형태로 사용할 수 있을 것 같습니다.
public Integer stringToInt(String s) {
try {
return Integer.valueOf(s);
} catch (NumberFormatException e) {
return null;
}
}
private String getNum1() {
return num1.geText().toString());
}
private String getNum2() {
return num2.geText().toString());
}
int num1 = stringToInt(getNum1();
int num2 = stringToInt(getNum2();
// 숫자1이나 숫자2가 숫자형 문자열이 아니므로, 에러임.
if (num1 == null || num2 == null) {
// 에러메시지 출력 같은 에러 핸들링
return;
}
// 여기는 에러가 아니므로, 정상적인 루틴을 진행.
참고로 float나 double같은 primtive 타입을 floating point의 정확도를 다루는데 문제점이 있을 수 있으니 이 부분이 중요하다면BigInteger나 BigDecimal같은 클래스를 사용하시길 권장합니다.