Java에서 콘솔을 통해 값을 입력받아야 할 때, Scanner를 정말 많이 사용하게 된다.
스캐너의 경우, 일반적인 사용법은 입출력으로 나뉠 수 있는데,
1. Scanner sc = new Scanner(System.in); // 입력값
2. Scanner sc = new Scanner(System.out); // 내보내는 값
위처럼 스캐너 객체를 생성할 때 입력 값을 받도록 한다.
그런데 스캐너를 통해 입력을 받을 때, 변수의 자료형을 구분해주어야한다.
Java에서는 특히나 자료형을 더 신경써주어야한다 !
아래 예시를 봐보자.
import java.util.Scanner;
public class next2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
String str = sc.nextLine();
System.out.println("num: " + num);
System.out.println("str: " + str);
}
}
위 코드 결과가 어떻게 나올 것이라고 생각하는가?
```
Scanner 라이브러리를 통해 구현하면서 처음 맞닥뜨렸던 문제였다. 위의 코드를 통해 값을 입력할 경우,
아래와 같이 1만 입력하고 엔터를 쳤더니 str에 대한 값을 입력할 기회조차 없이 print문이 출력되었다.
먼저 코드에서 sc.nextInt()를 통해 int형에 대한 값을 받았는데, nextInt()의 경우 엔터나 공백을 기준으로 앞의 값을 가져온다. 따라서 1을 가져오고 나서, 버퍼 상에 엔터키가 남아 있어 다음의 str에 대한 sc.nextLine()이 엔터키를 받아드려 입력이 끝이 난 것이다.
엔터키를 소진 시키기 위해서는 sc.nextLine()을 통해 큐에 남은 값들을 스캐너를 통해 비워줘야한다.
아래 코드 사이에 sc.nextLine()을 추가해서 다시 실행해보았다.
import java.util.Scanner;
public class next {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("숫자:");
int num = sc.nextInt();
sc.nextLine();
System.out.print("문자:");
String str = sc.nextLine();
System.out.printf("num : %d\n", num);
System.out.printf("str : %s\n", str);
}
}
위처럼 정상적으로 Scanner를 통해 입출력에 성공한 것을 확인할 수 있다!
'Java' 카테고리의 다른 글
Java_int와 Integer의 차이 (0) | 2022.07.31 |
---|---|
Java_BufferedReader 예외처리 경우 (0) | 2022.07.18 |
Java_컬렉션 프레임워크 (0) | 2021.03.02 |
Java_인터페이스 (0) | 2021.02.22 |
Java_추상 클래스 (0) | 2021.02.20 |