스캐너(Scanner)
Scanner sc = new Scanner(System.in);
System.in : 컴퓨터 자체 표준입출력
키보드 입력값을 받아오기 위한 명령어. 키보드 한정.
System.out : 콘솔(결과 나오는 창. 이 중 하나의 도구가 모니터) 에다 출력하기 위한 표준출력
문자
nextLine() : 문자/문자열을 받아옴
-다른 next는 값만 가져오지만 얘만 줄바꿈도 같이 버퍼에서 끌어온다
next() : : 문자/문자열을 받아옴
숫자
nextInt() : 정수 int 받아옴
nextlong() : 정수 long 받아옴
netxFloat() : 실수타입 float 받아옴
nextDouble() : 실수타입 double 받아옴
키보드 입력이 들어오면 값을 받아 버퍼(Buffer) 임시저장공간에 잠깐 저장됨
nextLine()은 받아온 값(값\n(줄바꿈))을 전체 다 인식 -버퍼에는 값이 안남음. 값을 전체 다 인식해서 넘기기기에.
next()는 받아온 값(값\n) 중 실제 데이터만 인식 -딱 값만 가지고간다 -버퍼에는 \n(줄바꿈)이 남아있음
스캐너 사용시, 입력도 안했는데 값이 넘어가는 이유
콘솔창에서 address가 입력이 안됨
System.out.print("이름를 입력하세요 : ");
String name2 = sc2.nextLine();
System.out.print("나이를 입력하세요 : ");
int age2 = sc2.nextInt();
System.out.print("주소를 입력하세요 : ");
String address2 = sc2.nextLine();** // 결과값에서 address가 입력이 안됨
System.out.println(name2+"("+age2+")"+"님이 사시는 곳은 "+address2+"입니다.");
키보드 입력 강건강 엔터치면 강건강\n까지 입력됨
버퍼 공간에 강건강\n까지 입력됨
nextLine()은 강건강\n 전체를 다 가지고가서 버퍼에 남는게 없음
String name = sc.nextLine();의 넥스트 라인에 강건강\n이 들어가있는 상태
.nexline()에서 변수 name으로 넘어갈 때 강건강만 넘어가고 \n는 짤려서 안넘어감
해결방법 3가지
- 주소를 next()로 받아오기
- nextLine()을 추가하기
- 엔터가 남지 않도록 나이를 받을 때, nextLine() 받은 후 parsing하기
해결방법1
Scanner sc2 = new Scanner(System.in);
System.out.print("이름를 입력하세요 : ");
String name2 = sc2.nextLine();
System.out.print("나이를 입력하세요 : ");
int age2 = sc2.nextInt();
System.out.print("주소를 입력하세요 : ");
String address2 = sc2.**next();**
해결방법2
Scanner sc2 = new Scanner(System.in);
System.out.print("이름를 입력하세요 : ");
String name2 = sc2.nextLine();
System.out.print("나이를 입력하세요 : ");
int age2 = sc2.nextInt();
**sc2.nextLine();** // 중간에 넥스트라인 추가로 \\n의 찌꺼끼를 패스시킴
System.out.print("주소를 입력하세요 : ");
String address2 = sc2.nextLine();
System.out.printf("%s(%d)님이 사시는 곳은 %s입니다.", name2, age2, address2);
해결방법3
parsing : 문자열을 데이터타입 기본형(primitive) 으로 바꾸는 것
Scanner sc2 = new Scanner(System.in);
System.out.print("이름를 입력하세요 : ");
String name2 = sc2.nextLine();
System.out.print("나이를 입력하세요 : ");
String strAge = sc2.nextLine();
int age2 = Integer.parseInt(strAge); // (strAge)를 parsing 하고 나온 것을 변수에 넣어야함
System.out.print("주소를 입력하세요 : ");
String address2 = sc2.nextLine();
'JAVA > 개념정리' 카테고리의 다른 글
[Java] 연산자(Operator) - 2.다항연산자 (0) | 2022.07.28 |
---|---|
[Java] 연산자(Operator) - 1.단항연산자 (0) | 2022.07.28 |
[Java] 상수(Constant) & 형변환(Casting) (0) | 2022.07.27 |
[Java] 실행 클래스 & 기능 클래스 (0) | 2022.07.27 |
[Java] 변수(Variable) (0) | 2022.07.27 |