티스토리 뷰

포스팅에 앞서 내용이 틀릴 수 있습니다.
해당 부분 지적 감사히 받습니다.

 

자바언어를 사용해 본 사람이라면 아마 모두 Scanner에 대해서 사용해 본 경험이 있을 것이다.

 

아래 코드 예시를 보자.

public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    int a = 0;
    System.out.print("정수를 입력하세요 : ");
    a = s.nextInt();
    System.out.println("입력받은 정수 : " + a);
}

 

실행 결과

 

아직은 아무 문제가 없다.

 

그렇다면 아래 코드는 어떨까?

public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    int a = 0;
    String st ;
    System.out.print("정수를 입력하세요 : ");
    a = s.nextInt();
    System.out.print("문자열도 입력하세요 : ");
    st = s.nextLine();
    System.out.println("정수: " + a + "문자열" + st);
}

 

실행 결과

 

자 우리가 의도했던 결과대로 나오지 않는 것을 볼 수 있다.

 

의도 : 정수 입력받고 문자열 입력받기

 

이러한 문제가 발생하는 이유는 바로 Scanner.nextInt() 함수의 문제이다.

 

그렇다면 왜 이러한 오류가 발생하는 것일까?

 

nextInt() : 정수형을 입력받음

nextLine() : 한 줄을 입력받음 + 개행문자까지 인식

 

바로 nextInt()에서 정수를 입력받긴 했지만 우리는 Enter 키를 통해 개행문자까지 입력하였다.

 

ex) 3\n

 

다만 nextInt() 함수는 개행문자를 인식하지 않아 아직 메모리에 남아있었는데, 바로 다음 문자열을 입력받을 때 아직 메모리에 남아있던 개행문자가 바로 인식되어 한줄을 입력받은 것이다.

 

이를 해결하기 위해선 어떻게 해야 할까?

 

아래와 같이 코드를 수정하면 된다.

public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    int a = 0;
    String st ;
    System.out.print("정수를 입력하세요 : ");
    a = s.nextInt();
    
    s.nextLine();
    
    System.out.print("문자열도 입력하세요 : ");
    st = s.nextLine();
    System.out.println("정수: " + a + "문자열" + st);
}

 

바로 nextInt() 함수 다음 줄에 nextLine() 함수를 한번 더 사용하였다.

 

따라서 메모리에 남아있던 개행문자가 처리되고 나서 다시 깔끔해진 상태로 문자열을 입력받을 수 있게 된 것이다.

 

실행 결과로 증명해 보자.

 

 

정상적으로 동작하는 것을 볼 수 있다.

댓글