반응형
Scanner를 이용한 다양한 자료형 값 입력 받기
1 . 문자열 입력 받기
- nextLine() : 입력 받은 값을 문자열로 반환해줌
● import 작성
● Scanner 객체 생성
Scanner sc = new Scanner(System.in);
System.out.print("이름을 입력하세요 : ");
● 입력 값 받기
String name = sc.nextLine();
System.out.println("입력하신 이름은 " + name + "입니다.");
● 실행결과
이름을 입력하세요 : 입력
입력하신 이름은 (입력 받은 값) 입니다.
2 . 정수형 값 입력 받기
- nextInt() : 입력 받은 값을 int형으로 반환해줌
- 숫자가 아닌 값을 입력하게 되면 java.util.InputMismatchException이 발생함
- int 범위를 초과한 값을 입력하게 되면 역시 InputMismatchException이 발생함
Scanner sc = new Scanner(System.in);
System.out.print("나이를 입력하세요 : ");
int age = sc.nextInt();
System.out.println("입력하신 나이는 " + age + "입니다.");
● 실행결과
나이를 입력하세요 : 입력
입력하신 나이는 (입력 받은 값) 입니다.
- nextLong() : 입력 받은 값을 long형으로 반환해줌
Scanner sc = new Scanner(System.in);
System.out.print("금액을 입력하세요 : ");
long money = sc.nextLong();
System.out.println("입력하신 금액은 " + money + "원 입니다.");
● 실행결과
금액을 입력하세요 : 입력
입력하신 금액은 (입력받은 값) 원 입니다.
3 . 실수형 값 입력 받기
- nextFloat() : 입력 받은 값을 float 형으로 반환함
- nextDouble() : 입력 받은 값을 double 형으로 반환함 ( nextFloat와 유사하게 동작한다)
- 숫자가 아닌 값의 경우 InputTypeMismatchException 발생
- 정수 입력 시 실수로 변환 후 정상 동작하며 길이를 길게 입력하면 유효자리 숫자까지만 표현
Scanner sc = new Scanner(System.in);
System.out.print("키를 입력하세요 : ");
float height = sc.nextFloat();
System.out.println("입력하신 키는 " + height + "cm 입니다.");
●실행결과
키를 입력하세요 : 입력
입력하신 키는(입력 받은 값) cm 입니다.
4 . 논리형 값 입력 받기
- nextBoolean() : 입력 받은 값을 boolean 형으로 반환함
- true of false 외의 다른 값을 입력하게 되면 InputTypeMismatchException 발생
System.out.print("참과 거짓 중에 한가지를 true or false로 입력하세요 : ");
boolean isTrue = sc.nextBoolean();
System.out.println("입력하신 논리 값은 " + isTrue + "입니다.");
5 . 문자형 입력 받기
- 문자를 직접 입력 받는 기능은 제공하지 않으므로 문자열로 입력 받고 입력 받은 문자에서 원하는 순번째 문자를 분리해서 사용해야 한다.
- java.lang.String의 charAt(int index)를 사용한다.
- charAt(int index) : index를 정수형으로 입력하면 문자열에서 해당 인덱스에 있는 한 문자를 문자형으로 반환해주는 기능을 한다.
- 만약 존재하지 않는 인덱스를 입력하게 되면 java.lang.StringIndexOutOfBoundsException이 발생한다.
sc.nextLine();
System.out.print("아무 문자나 입력 해주세요 : ");
char ch = sc.nextLine().charAt(0);
System.out.println("입력하신 문자는 " + ch + "입니다.");
● 실행결과
아무 문자나 입력 해주세요 : hello 입력시
입력하신 문자는 h입니다.
(charAr()에 인덱스 0번을 입력했기 때문에 hello문자의 0번째인 h가 출력된다.)
6. Scanner의 nexLine()과 next()
- nexLine() : 공백을 포함한 한 줄을 입력을 위한 개행문자 전까지 읽어서 문자열로 반환한다.(공백문자포함)
- next() : 공백문자나 개행문자 전까지를 읽어서 문자열로 반환한다. (공백문자 포함하지 않음)
● Scanner 객체 생성
Scanner sc = new Scanner(System.in);
● nextLine()
System.out.print("인사말을 입력해주세요 : ");
String greeting1 = sc.nextLine();
System.out.println(greeting1);
● next()
System.out.print("인사말을 입력해주세요 : ");
String greeting2 = sc.next();
System.out.println(greeting2);
● 실행결과
인사말을 입력해주세요 : 안녕 하세요
안녕 하세요
인사말을 입력해주세요 : 안녕 하세요
안녕 (공백부터 뒷문장까지 출력되지 않음)
Scanner 주의 사항
● next()로 문자열 입력 받은 후 정수, 실수, 놀리 값 입력 받을때
Scanner sc = new Scanner(System.in);
System.out.print("문자열을 입력해주세요 : ");
String str1 = sc.next();
System.out.println("str1 : " + str1);
● 실행 결과 (오류)
문자열을 입력해주세요 : 안녕하세요 반갑습니다
str1 : 안녕하세요
숫자를 입력해주세요 : Exception in thread "main" java.util.InputMismatchException
: "안녕하세요 반갑습니다" 입력시 공백을 기준으로 두 개의 토큰 "안녕하세요"와 "반갑습니다"로 분리가 된다.
next()는 다음 토큰인 "안녕하세요" 읽었고 nexInt()는 다음 토큰을 정수로 읽어야 하는데 "반갑습니다"가 나와서InputMismatchException가 발생한다. => 공백이 있는 문자열을 입력 받을 경우에는 nextLine()을 사용하자.
● 정수, 실수, 논리값 입력 후 nextLine()으로 문자열 입력 받을 때
System.out.print("다시 숫자를 입력해주세요 : ");
int num2 = sc.nextInt();
System.out.println("num2 : " + num2);
System.out.print("공백이 있는 문자열을 하나 입력해주세요 : ");
String str2 = sc.nextLine();
System.out.println("str2 : " + str2);
● 실행결과
다시 숫자를 입력해주세요 : 12
num2 : 12
공백이 있는 문자열을 하나 입력해주세요 : str2 :
: 앞에서 남긴 개행을 nextLine()이 읽고 넘어가서 입력전 프로그램이 종료된다.
=> 미리 nextLine()을 호출해서 버퍼를 비우고 동작시킨다.
반응형