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값을 없애줘야한다.