728x90

 

스캐너(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가지

  1. 주소를 next()로 받아오기
  2. nextLine()을 추가하기
  3. 엔터가 남지 않도록 나이를 받을 때, 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();

 

728x90
반응형
728x90

 

실수 소수라고 해서 %f를 쓰면 소수점 명령어랑 겹쳐서 안먹히니 %f빼고 %.1f로!!!

 

public void method1() {
	// 키보드로 가로, 세로 값을 실수형으로 입력 받아 사각형의 면적과 둘레를 계산하여 출력하세요
		
		Scanner sc = new Scanner(System.in);
		System.out.print("가로 : ");
		float width = sc.nextFloat();
		System.out.print("세로 : ");
		double length = sc.nextDouble();
		
		// 방법1 : println()
		System.out.println("면적 : " + (width * length));
		System.out.println("둘레 : " + ((width + length)*2));
		
		// 방법2 : printf()
		System.out.printf("면적 : %.2f%n",width*length);
		System.out.printf("둘레 : %.1f" ,(width + length)*2);
		// 실수 소수라고 해서 %f를 쓰면 소수점 명령어랑 겹쳐서 안먹히니 %f빼고 %.1f로
	}
728x90
반응형

+ Recent posts