Scanner 클래스
2022. 12. 10. 13:46ㆍ카테고리 없음
:자바에서 데이터를 출력하는 명령은 System.out이고 데이터를 입력받을 때는 System.in 을 사용합니다.
데이터를 입력받을 때는 표준 Java API 인 Scanner클래스를 사용 합니다.
스캐너 사용방법
1.스캐너 객체 생성
Scanner scanner = new Scanner(System.in)
2.입력받을 데이터 타입에 따른 메소드 호출
- next();공백을 포함하지 않는 문자열을 입력받을 때
-nextLine();공백을 포함한 문자열을 입력 받을때
-nextInt(); 정수를 입력 받을 때
-nextDouble(); 실수를 입력 받을때
public class ScannerExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("문자열입력: ");
String str = scanner.nextLine();
System.out.println(str);
System.out.println("정수입력: ");
int i = scanner.nextInt();
System.out.println(i);
System.out.println("실수입력: ");
double j = scanner.nextDouble();
System.out.println(j);
}
}
next()와 nextLint() 메소드의 차이
package ex8;
import java.util.Scanner;
public class _Q4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 다음 정보를 입력해서 출력하는 프로그램 작성하세오
// 이름 = s
// 나이 = in
// 주소 =s
// 키 = double
// 몸무게 = double
String name;
int age;
String addr;
double length;
double weight;
Scanner scan = new Scanner(System.in);
System.out.print("이름을 입력하세요:");
name = scan.nextLine(); // "홍길동(E) "까지 가져오지만 실제 name에 홍길동만 입력
System.out.print("나이를 입력하세요:");
age = scan.nextInt(); // "22"만 가져옴
//키보드버퍼내의 엔터 제거
/* scan.nextLine(); */
System.out.print("주소를 입력하세요:"); // 서울 마포 서교동(E)
addr = scan.nextLine();
System.out.print("키를 입력하세요:");
length = scan.nextDouble();
System.out.print("몸무게를 입력하세요:"); // 값없이 입력구분자만 있으면 그냥 넘어감 ,다음입력값이 nextLine이면 없애야 하는데 그게아니면 그냥 두어도 괜찮다.
weight = scan.nextDouble();
System.out.println("----------[입력받은 정보]----------");
System.out.printf("이름: %s\n", name);
System.out.printf("나이: %d\n", age);
System.out.printf("주소: %s\n", addr);
System.out.printf("키: %.1f(cm)\n", length);
System.out.printf("몸무게: %.1f(kg)\n", weight);
// scanner 기능중에 // nextLine 만 e 까지 가져오기 에 주의 해서 사용해야 한다 그러면 없애는 것 사용<=scanner
// .nextLine();
/*
* 1.next() 2.nextint() 3.nextDiuble() 4.nextBoolean()
*/
}
}
이름을 입력하세요:최미영
나이를 입력하세요:27
주소를 입력하세요:키를 입력하세요:ㅇ
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextDouble(Scanner.java:2564)
at ex8._Q4.main(_Q4.java:41)
이름을 입력하세요:최미영
나이를 입력하세요:27
주소를 입력하세요:키를 입력하세요:168
몸무게를 입력하세요:
nextInt() 메소드 다음에 nextLine() 메소드를 실행하려고 할때 nextLine()메소드가 그냥 넘어가버리는 오류가 생겨난다. 이 이유는 nextInt()메소드를 실행 할 때 위에서 "최미영" ,27 을 콘솔에 입력하고 엔터를 누를때 "최미영",27 을 리턴시켰지만 Enter값은 그대로 남아있다. nextLine() 메소드는 Enter값을 기준으로 메소드를 종료시키기 때문에 nextLine()메소드가 실행될 때 남아있는 Enter값을 그대로 읽어 바로 종료된 것이다. 그래서 이 넘어가고 세번째 주소 입력이넘어가고 그 다음 키를 입력하세요가 나온것이다.
nextXXX()을 쓰고난 그다음 문자를 입력하려고 할 때 next() 메소드를 사용하여야 한다. 아니면 위에 nextLine()메소드를 한번더 써줘서 enter값을 없애줘야한다.