본문 바로가기

공부함/JAVA

[JAVA] scanner : 사용자에게 값 입력받기

 

import

import java.util.Scanner;

 

 

객체 생성

Scanner sc = new Scanner(System.in);

 

입력받기

int inputValue = sc.nextInt(); // int형 입력
long inputValue = sc.nextLong(); // long형 입력
boolean inputValue = sc.nextBoolean(); // long형 입력

String inputValue = sc.next(); // 문자형 입력 ( 공백을 기준으로 한개의 단어 )
String inputValue = sc.nextLine(); // 문자형 입력 ( 줄바꿈을 기준으로 한 줄의 문장 )

String inputValue = sc.hasnext(); // 문자형 입력 ( 공백을 기준으로 한개의 단어 )

 

* 주의사항

.nextInt 일 때 문자열을 입력하면 에러가 발생한다.

따라서 사용자로부터 입력받을 값의 문자형을 지정해주고, 맞지 않는 경우에 대한 예외처리를 해 주어야 한다.

잘못된 값이 입력됨에 따라 발생할 수 있는 에러의 종류는 아래와 같다.

InputMismatchException
    : 입력값이 정수 정규식과 일치하지 않거나 범위를 벗어난 경우
NoSuchElementException
   : 더이상 입력받을 수 있는 값이 없는 경우 ( 입력받을 값을 1개만 설정 하였으나, 입력 종료시점을 지정하지 않아 계속 입력받으려고 할 때 발생하는 에러 
IllegalStateException
   :  유효하지 않은 상태 ( scanner 을 close 한 후 scanner을 사용하려고 한 경우

 

 

계속 입력받기

hasNext

: hasNext는 입력받은 값이 문자열인 동안 true를 반환한다. 즉 모든 값을 입력받을 수 있다.

: hasNextInt 인 경우 입력된 값이 숫자인 동안에만 ture를 반환한다. 문자열이 입력되면 입력 종료된다.

// 문자열 입력
Scanner sc = new Scanner(System.in);
do {

    System.out.println("아무거나 입력해주세요.");
    a = a + "/" + sc.next();
    System.out.println(a);

} while (sc.hasNext());


// 숫자열 입력
Scanner sc = new Scanner(System.in);
do {
    try {
        a = sc.nextInt();
        b = sc.nextInt();

        if (0 >= a || b >= 10) {
            throw new Exception();
        }
    } catch (Exception e) {
        System.out.println("입력값이 유효하지 않음. 입력종료 [ a: " + a + "/b :" + b);
    }
} while (sc.hasNextInt());
sc.close();

 

 

 

입력종료

: Scanner의 사용 종료, 이후 재 사용을 위하여 재선언 해야한다.

sc.close();