백엔드 과정/Java

[Java] day6. Scanner()

mim 2021. 12. 23. 10:43
반응형

Scanner Class

사용자로부터 입력되는 정수, 실수, 문자열을 처리하는 클래스

import 작성 java.util.Scanner;

 

Scanner 작성 - 키보드 입력 값 받기

다음 줄에 입력을 대기시키지 않기 위해 println이 아닌 print 사용


/* Scanner 객체 생성 */
Scanner sc = new Scanner(System.in);

 

  1. 정수 : sc.nextInt()
  2. 실수 : sc.nextFloat() 또는 sc.nextDouble()
  3. 문자열 : sc.next() (공백문자 미포함) 또는 sc.nextLine() (공백문자 포함)

 

스캐너 주의사항
 스캐너의 next 메소드들은 입력한 내용을 버퍼로부터 토큰단위로 분리해서 읽어온다.
 그래서 크게 두가지 사항을 주의해야 한다.

  1. next()로 문자열 입력 받은 정수, 실수, 논리값 입력받을 때 
    next()는 "안녕하세요"를 읽었고 nextInt()는 다음 토큰을 정수로 읽어야 하는데 "반갑습니다"가 나와서
    InputMismatchException 에러발생
    • 공백이 있는 문자열을 받을 경우에는 nexLine()을 이용하자. 
  2. 정수 실수 논리값 입력후 nextLine()으로 문자열 입력받을 때
    앞에서 남긴 개행을 nextLine이 읽고 넘어가서 아무것도 입력하지 않았는데 출력되고 프로그램이 종료된다.
    • 미리 nextLine()을 호출해서 버퍼를 비우고 동작시킨다.

 

스캐너는 아쉽게도 문자를 직접 입력받는 기능은 제공하지 않는다.
 따라서 문자열로 입력받고, 입력 받은 문자에서 원하는 순번째 문자를 분리해서 사용해야한다.

  • char ch = sc.nextLine().charAt(0);

charAt(int index); ()안에 담긴 순번째 문자를 반환. 0번째 문자 반환 !

입력받은 문자 길이보다 긴, 존재하지 않는 인덱스를 입력하면 에러 발생.

 

 


주소값 비교(==)와 값 비교(equals)

 == 연산자는 비교하고자 하는 두개의 대상의 주소값을 비교

String클래스의 equals 메소드는 비교하고자 하는 두개의 대상의 값 자체를 비교!

 

스캐너로 입력받은  문자열은 ==연산자가 아닌  equals 메소드로 값을 비교해야 한다. 

Scanner sc = new Scanner(System.in);
		
		System.out.println( "사과 바나나 복숭아 키위");
		System.out.print("과일 이름을 입력하세요 : ");
		
		//선택한 과일을 담는 변수
		String fruit = sc.nextLine();
		
		// 과일 값을 저장할 변수
		int price = 0;
		
		if(fruit.equals("사과")) {
			price += 1000;
			System.out.println( fruit + "의 가격은 "+ price +" 원 입니다.");
		} else if(fruit.equals("바나나")) {
			price += 3000;
			System.out.println( fruit + "의 가격은 "+ price +" 원 입니다.");
		}else if(fruit.equals("복숭아")) {
			price += 2000;
			System.out.println( fruit + "의 가격은 "+ price +" 원 입니다.");
		}else if(fruit.equals("키위")) {
			price += 5000;
			System.out.println( fruit + "의 가격은 "+ price +" 원 입니다.");
		} else {
			System.out.println("준비된 상품이 없습니다.");
		}

=> 위 문제풀이에서 if문안에 if ( fruit == "사과" ) 라고 입력하고 실행하면 "준비된 상품이 없습니다"로 나와서 구글링.

String 문자열 비교하는 방법으로 이퀄을 사용해 보았다. if (fruit.equals("사과")) {

} 변수명.equals("비교문자") 이렇게 사용하는 듯 하다.

반응형