Scanner 클래스
java.util 패키지의 Scanner 클래스를 이용하면 콘솔로부터 기본 타입의 값을 바로 읽을 수 있다. Scanner 객체를 생성하려면 다음과 같이 생성자에 System.in 매개값을 주면 된다.
Scanner scanner = new Scanner(System.in)
Scanner 메소드들은 콘솔에서 데이터를 입력한 후 Enter키를 누르면 동작하도록 되어 있다. 다음 예제를 보자
public class ScannerExample { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("문자열입력: "); String str = scanner.nextLine(); System.out.println(str); System.out.println("정수입력: "); int i = scanner.nextInt(); System.out.println(i); System.out.println("실수입력: "); double j = scanner.nextDouble(); System.out.println(j); } } | cs |
Scanner 클래스에서 nextLine(), nextInt(), nextDouble() 메소드를 살펴 보았다. 각각 메소드에 맞게 알맞는 데이터 타입의 값으로 리턴해준다. 이 중 문자열을 입력받아 리턴하는 nextLine() 메소드가 많이 쓰인다. 이 메소드는 String 타입으로 리턴해주는데 이것과 같은 타입의 메소드로 next() 가 있다. 다음 예제를 통해 이 둘 메소드의 차이를 알아보자
next()와 nextLine() 메소드의 차이
public class ScannerExample2 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("문자열입력: "); String str1 = scanner.nextLine(); System.out.println(str1); System.out.println("문자열입력: "); String str2 = scanner.next(); System.out.println(str2); } } | cs |
위에서 보다시피 next() 메소드는 안녕하세요만 리턴한걸 알수 있다. nextLine()과 next()메소드의 차이는 nextLine()메소드는 Enter를 치기 전까지 쓴 문자열을 모두 리턴한다는 것이고 next() 메소드는 스페이스 즉 공백 전까지 입력받은 문자열을 리턴한다는 것이다. 그래서 공백이 있는 문자열 한줄을 리턴받고 싶으면 nextLine() 메소드를 사용하고 그냥 한 단어만 쓰고 싶다면 next()를 쓰는거지만 nextLine()을 써도 상관없다. 하지만 이것 때문에 치명적인 논리적 오류가 발생한다. 다음 예제를 보자
public class ScannerExample2 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("첫번째 정수입력: "); int i = scanner.nextInt(); System.out.println(i); System.out.println("첫번째 문자열입력: "); String str1 = scanner.nextLine(); System.out.println(str1); System.out.println("두번째 정수입력: "); int j = scanner.nextInt(); System.out.println(i); System.out.println("두번째 문자열입력: "); String str2 = scanner.next(); System.out.println(str2); } } | cs |
nextInt() 메소드 다음에 nextLine() 메소드를 실행하려고 할때 nextLine()메소드가 그냥 넘어가버리는 오류가 생겨난다. 이 이유는 nextInt()메소드를 실행 할 때 20을 콘솔에 입력하고 엔터를 누를때 20을 리턴시켰지만 Enter값은 그대로 남아있다. nextLine() 메소드는 Enter값을 기준으로 메소드를 종료시키기 때문에 nextLine()메소드가 실행될 때 남아있는 Enter값을 그대로 읽어 바로 종료된 것이다. 그래서 첫번째 문자열입력: 이 넘어가고 두번째 정수입력: 이 출력된 것이다.
만약 정수를 입력하고 그다음 문자를 입력하려고 할 때 next() 메소드를 사용하여야 한다. 아니면 위에 nextLine()메소드를 한번더 써줘서 enter값을 없애줘야한다.
'Language > Java' 카테고리의 다른 글
[Java] 스레드 이름, 우선순위(priority), 동기화(synchronized) 실습하면서 알아보기 (0) | 2018.07.02 |
---|---|
[Java] 스레드 개요, 멀티태스킹과 멀티스레딩, 스레드 생성과 실행, 중요 클래스를 활용한 기본적인 실습 (1) | 2018.07.02 |
[Java] 컬렉션 프레임워크(Collection Framework) List, Set, Map 각각의 특징을 알아보고 대표적인 구현클래스 사용해보기 (0) | 2018.06.26 |
[Java] 접근제한자의 종류와 실습으로 알아보는 각각의 특성, protected의 이해 (2) | 2018.06.26 |
[Java] 패키지 정의와 선언 import문을 활용한 패키지 사용 방법 (0) | 2018.06.26 |