본문 바로가기

언어공부/Java

자바 입력 Scanner 클래스 + import 문장

자바에서 입력을 받기 위해 Scanner 클래스와 import문장에 대해서 알아보자.

 

import java.util.Scanner;//입력기능을 가지고 있는 Scanner 클래스 포함.

public class Test1 {

	public static void main(String[] args) {		
		Scanner scan=new Scanner(System.in);//scan변수를 선언하면서 초기화.
        
		System.out.print("문자열을 입력하세요>>");
		String str=scan.nextLine();//str을 문자열로 입력받는다.
        
		System.out.print("정수 숫자를 입력하세요>>");
		int a=Integer.parseInt(scan.nextLine());//i를 정수(int)로 입력받는다.
		int b=scan.nextInt();//자료 타입별로 입력할 수 있다.
        
	        System.out.print("실수 숫자를 입력하세요>>");
		float c=scan.nextFloat();//자료 타입별로 입력할 수 있다.
		Double d=scan.nextDouble(); //자료 타입별로 입력할 수 있다.
        
		System.out.println(str+a+b+c+d);
        //str="HELLO YEONY!", a="365", b="0", c="1.3", d="32.53"를 입력받으면 
        //"HELLO YEONY!36501.332.53"가 출력된다.
        //여기서 a와b는 정수로 입력 받기 때문에 문자를 입력하면 에러가 뜬다.
	}

}

모바일 배려용

 

1. import java.utill.Scanner; 

위의 문장은 입력기능을 가지고 있는 Scanner클래스를 포함시키는 문장이다. 이 클래스는 패키지라는 단위로 그룹핑 되어있다. 이러한 패키지들을 자바 클래스 라이브러리(Java Class Library)라고 한다. 이 클래스 라이브러리를 사용하려면 먼저 import문장을 이용하여 원하는 클래스를 프로그램 안으로 포함시켜야 한다.

이클립스에서 scan변수 선언 문장을 커서로 클릭하고 ctrl+shift+o를 누르면 저절로 입력된다.

 

2. Scanner scan=new Scanner(System.in);

위의 문장은 scan 변수를 Scanner타입으로 선언하면서 초기화하는 문장이다. Scanner는 데이터를 읽을 수 있는 기능을 가지고 있는 클래스로서 이것을 사용하려면 먼저 Scanner 타입의 변수를 생성하여야 한다. new Scanner(System.in)은 Scanner클래스의 객체(object)를 생성하는 문장이다.

 

3. String str=scan.nextLine();

위의 문장은 Scanner 객체인 scan을 이용해 사용자로부터 문자열을 읽어들이는 문장이다. scan을 통하여 nextLine()라는 메소드를 호출하여 사용자로부터 문자열을 입력받아 변수 str에 대입한다.

 

4. int a=Integer.parseInt(scan.nextLine());

위의 문장은 Scanner 객체인 scan을 이용해 사용자로부터 정수를 읽어들이는 문장이다. 다만 5번과 다른 점은 Integer.parseInt()를 이용해 scan.nextLine()을 사용한다는 점이다.

 

5. int b=scan.nextInt();

위의 문장은 Scanner 객체인 scan을 이용해 사용자로부터 정수를 읽어들이는 문장이다. scan을 통하여 nextInt()라는 메소드를 호출하여 사용자로부터 정수를 입력받아 변수 b에 대입한다. 자료형 타입에 따라 nextByte(), nextFloat(), nextDouble()등으로 바꿔 사용이 가능하다(변수 자료형 타입과 맞춰야한다.). 

 

nextInt()와 nextLine()의 차이

nextInt()는 값을 입력하고 누르는 'Enter'키의 개행문자 값을 포함하지 않는다.

보통은 개행문자(+문자열 공백 등)를 포함하기 위해 nextLine()으로 자주 쓰는 것 같다.

 

그래서 만약 nextInt()와 nextLine()을 같이 쓰고 싶다면, nextInt(); 뒤에 scan.nextLine()을 추가로 사용해줘야 한다. 

 

import java.util.Scanner;

public class Test1 {

	public static void main(String[] args) {	
		Scanner scan = new Scanner(System.in);

		System.out.println("숫자를 입력하세요>>");
		double num = scan.nextDouble();
  		  //여기서 35.23를 입력하고 엔터를 치면 35.23값만 들어가고 엔터값은 대기한다.
		scan.nextLine(); // nextDouble()에서 대기한 엔터값이 여기서 입력되어 처리된다.
	
  		  System.out.println("문자를 입력하세요>>");
		String str = scan.nextLine();
    		//scan.nextLine()가 위에 없었다면 대기한 엔터값이 str로 들어가 문자를 입력할 수 없게된다. 
  		  System.out.println(num+str);
}
}

모바일 배려용

 

(그냥 nextLine()으로 통일해서 사용하는 것이 좋다....)

 

next()와 nextLine()의 차이

"HELLO YEONY"를 입력받았을 때  next()는 빈 문자(space)만을 인식하여 그 전까지의 문자열을 반환하므로 HELLO만, nextLine()에는 Enter를 인식하여 그 전까지의 문자열을 반환하므로 HELLO YEONY가 나온다.

 

++추가

 

scan 변수를 선언할 때, 옆에 경고창"'scan'is never closed"이 뜨게된다. 

해결을 위해서는 코드 마지막 부분에 "scan.close();"를 추가해주면 된다.