[Java] day6. Scanner()
Scanner Class
사용자로부터 입력되는 정수, 실수, 문자열을 처리하는 클래스
import 작성 java.util.Scanner;
Scanner 작성 - 키보드 입력 값 받기
다음 줄에 입력을 대기시키지 않기 위해 println이 아닌 print 사용
/* Scanner 객체 생성 */
Scanner sc = new Scanner(System.in);
- 정수 : sc.nextInt()
- 실수 : sc.nextFloat() 또는 sc.nextDouble()
- 문자열 : sc.next() (공백문자 미포함) 또는 sc.nextLine() (공백문자 포함)
스캐너 주의사항
스캐너의 next 메소드들은 입력한 내용을 버퍼로부터 토큰단위로 분리해서 읽어온다.
그래서 크게 두가지 사항을 주의해야 한다.
- next()로 문자열 입력 받은 정수, 실수, 논리값 입력받을 때
next()는 "안녕하세요"를 읽었고 nextInt()는 다음 토큰을 정수로 읽어야 하는데 "반갑습니다"가 나와서
InputMismatchException 에러발생- 공백이 있는 문자열을 받을 경우에는 nexLine()을 이용하자.
- 정수 실수 논리값 입력후 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("비교문자") 이렇게 사용하는 듯 하다.