Scanner은 java.util에 있는 라이브러리!
import java.util.Scanner; 을 불러주고 시작해야 한다.
-Scanner 클래스의 선언-
Scanner name = new Scanner(System.in);
ㅇ인자로 System.in을 넣어준다.
-Scanner 클래스의 여러 메소드-
ㅇnext() : 문자열을 입력 받을때 사용 / 공백 이전의 한 단어를 받아온다.
ㅇnextLine() : \n(개행문자)가 나오기 전까지 문자열을 입력 받는다.
ㅇnextInt()
ㅇnextDouble()
ㅇnextLong()
ㅇnextShort()
등
.
.
.
아래서 자세히 공부해보자.
//Scanner 클래스를 호출해주자
import java.util.Scanner;
//Scanner 객체를 선언해주자
Scanner userInput = new Scanner(System.in);
//int를 입력받아보자.
int a, b;
a = userInput.nextInt();
b = userInput.nextInt();
//입력은 공백이나 줄로 구분한다.
(예 - 공백으로 구분)
49 30
(예 - 줄로 구분)
49
30
//어떻게 구분하든지 a,b에 담기는 값은 a=49, b=30;으로 같다.
//next메서드는 문자열을 입력 받을때 사용한다.
Strnig munjayull = userInput.next();
System.out.println(munjayull);
//입력한 문자열은 문자열 변수인 munjayull안에 들어간다.
//hello world라고 입력하면 hello만 입력된다.
//공백 바로 전까지만 값을 입력받기 때문이다.
//이때는 개행문자가 나오기 전의 한 줄만 입력받는 메소드인 nextLine()을 이용해야한다.
주의사항..(nextInt 뒤의 nextLine)
Scanner.nextInt메소드 이용시에 정수를 엔터를 사용해 입력하는 상황에서, 엔터(개행문자)바로 전까지만 숫자로 입력을 받는다. 즉 개행문자는 제거되지 않는다. 따라서, 개행문자는 뒤에 계속 남아있는 것이다.
개행문자가 남아있기 때문에 nextInt메소드를 사용한 바로뒤에서 nextLine 메소드로 한줄을 입력 받을 때, 그 엔터를 쳤던 것이 입력되기 때문에 원하는 데이터를 입력할 수 없다.
아래 코드처럼 사용하면 문제가 일어난다는 것이다.
System.out.print("a 입력: ");
a = userInput.nextInt();
System.out.print("b 입력: ");
b = userInput.nextLine();
이런식으로 작성하면 b에 아무것도 찍히지 않게 된다는 말이다.
해결방법
a와 b 입력 사이에 nextLine()메소드를 하나 더 사용해서 개행(엔터)를 처리해준다. 가장 편한 방법이다.
즉, userInput.nextLine(); 한 줄을 추가한다.
System.in.read() 메소드 (System패키지)
Java 5의 이전 버전에서 사용되었던 System.in.read()메서드도 알아두자.
이 메서드는 입력된 값을 아스키 코드값으로 저장한다.
ㅇA라는 데이터를 입력한다면 아스키코드 표현인 65가 된다.
ㅇa라는 데이터를 입력한다면 아스키코드 표현인 97이 된다.
ㅇ숫자를 입력하더라도 아스키코드 문자에 해당하는 값으로 저장되기 때문에, 아스키코드의 십진수 정수값 -48을 빼줘야 한다. 예를 들면
System.out.print("\n숫자를 입력하세요: ");
int b = System.in.read() - '0' //숫자 0의 아스키코드 십진수 값이 48이다. 즉, 48을 빼주는 거다.
이렇게 하면 숫자 5를 입력했을 때 5를 출력할 수 있다.
ㅇ또한 키보드의 엔터키도 아스키코드 값이 있고, 입력값에 포함이 된다. 처리해주지 않는다면 원치 않는 결과가 나올 수 있다. 엔터키를 누를 때 아스키코드 13번 값이 입력되고, 또 개행이 될 때 10번 값이 입력이 된다.. (입력값 \r과 \n) 이 값을 없애주기 위해서, System.in.read();메소드를 두 번 작성해야 한다. 그래야 이 \r과 \n값을 먹어버릴 수 있다.
깔끔히 정리해서 코드로 확인해보자.
(참고: 3번, 6번 줄: throws IOException을 알고 싶다면 '자바 입출력 예외처리'를 공부하자)
++A라는 문자 하나 입력하는 방법은 알았는데, "문자열"을 입력하려면 어떻게 해야할까??
조금이따가 더 공부해보자.
'JAVA' 카테고리의 다른 글
[혼자 공부하는 자바] 6/28 01-1 ~ 02-2 (0) | 2020.06.28 |
---|---|
[혼자 공부하는 자바][신용권] 목차 (0) | 2020.06.28 |
[JAVA] 클래스의 구성요소 / 필드(field) (0) | 2020.04.22 |
[JAVA] 변수타입 / 참조형 변수 String / String 클래스 (0) | 2020.04.22 |
[JAVA] 메소드 직접 만들기 / 메소드 구성 (0) | 2020.04.16 |