Java | NumberFormatException 에러

또리·2023년 8월 25일

Error

목록 보기
1/1
  1. 문제상황

백준 11382번을 풀던 중 NumberFormatException 에러가 발생했다.


그렇다면 내 코드에 어느 부분이 문제일까?

import java.io.*;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String numbers = scanner.nextLine();
        String [] number = numbers.split(" ");

        int num1 = Integer.parseInt(number[0]);
        int num2 = Integer.parseInt(number[1]);
        int num3 = Integer.parseInt(number[2]);

        System.out.println(num1+num2+num3);
    }
}

위와 같이 코드를 만들고 인텔리제이에서 확인해봤을 때는 출력 결과가 정상적으로 나왔지만, 백준에서는 자꾸 런타임 에러(NumberFormat)가 발생했다.

  1. 원인

java.lang.NumberFormatException은 문자열을 수로 변환할 때 발생하는 에러다.

내 입력 값들은 띄워쓰기 빼고 모두 숫자이기 때문에 띄어쓰기로 문자열을 나누면 정수 외 다른 타입은 없는데 어디가 문제인지 이해가 가지 않았다.

결국 포기하고 다른 분들의 답안을 참고해보니, 입력 시 A,B,C가 0보다 크고 10의 12제곱보다 작다는 조건이 있어 변수가 int형이 아닌 long형이어야 했던 것이다.

  1. 해결방법

그렇다면 어떻게 해결해야할까?

나는 간단히 int를 long으로 바꿔줬더니 맞는 결과값이 나왔다.

import java.io.*;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String numbers = scanner.nextLine();
        String [] number = numbers.split(" ");

        long num1 = Long.parseLong(number[0]);
        long num2 = Long.parseLong(number[1]);
        long num3 = Long.parseLong(number[2]);

            System.out.println(num1+num2+num3);
    }
}

백준을 풀 때 평소 조건은 잘 생각하지 않고 풀어도 큰 문제가 없었지만, 이번 기회를 통해 조건도 잘 생각해서 코드를 짜야겠다는 생각을 하게 되었다.

다른 분들도 나와 같은 실수를 하지 않길 바란다.

0개의 댓글