NumberFormat
java.lang.NumberFormatException은 문자열을 수로 변환할 때 발생하는 에러이다.
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int a = Integer.parseInt(bf.readLine());
int b = Integer.parseInt(bf.readLine());
System.out.println(a+b);
}
}
-> 소스 1. 두 수를 입력받고, 합을 출력하는 소스
소스 1이 올바르게 동작하려면, 첫째 줄과 둘째 줄에 수가 각각 하나씩 있어야한다. 따라서, 입력이 다음과 같은 경우에는 올바르게 3을 출력한다.
1
2
하지만!!! 입력이 다음과 같은 경우에는 java.lang.NumberFormatException이 발생한다.
1 2
이때 발생하는 런타임 에러 메시지는 다음과 같다.
Exception in thread "main" java.lang.NumberFormatException: For input string: "1 2"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at Main.main(Main.java:6)
문자열 "1 2"는 정수 하나로 변환할 수 없기 때문에, 에러가 발생한다. 이런 경우에는 소스가 문제의 입력 형식을 잘 지키고 있는지 확인해야한다. 입력이 한 줄에 공백으로 구분되어서 들어오는 경우, BufferedReader를 이용해 올바르게 구현한다면 아래와 같다.
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String[] strs = bf.readLine().split(" ");
int a = Integer.parseInt(strs[0]);
int b = Integer.parseInt(strs[1]);
System.out.println(a+b);
}
}
->소스 2. 두 수를 입력받고, 합을 출력하는 소스
java.lang.NumberFormatException는 수가 자료형의 범위를 벗어나 해당 자료형으로 벗어날 수 없을 때도 발생한다.
'뚝딱뚝딱 > Java' 카테고리의 다른 글
[Java] Stream이 뭐야! (0) | 2022.01.18 |
---|---|
[Java] interface, abstract 공부 (0) | 2022.01.18 |
[Java] 클래스 멤버, 인스턴스 멤버 (0) | 2022.01.18 |
[Java] Optional #null 다루는 새로운 방법 (0) | 2022.01.18 |
[Java] Wrapper class (0) | 2022.01.18 |