카테고리 없음

[자바JAVA] Scanner를 이용한 다양한 자료형 값 입력 받기

pupu91 2022. 7. 4. 17:47
반응형

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()을 호출해서 버퍼를 비우고 동작시킨다.

 

 

반응형