No. 01

 

 

Scanner 클래스


자바에서 화면에서 키보드로 키를 입력 받는 방법을 간단히 배워보자.

자바에서 화면으로부터 입력받는 방법은 여러 가지가 있지만 간단하고 편리한 Scanner 클래스를 이용해서 화면으로부터 입력받는 방법을 배워보자.


Scanner 객체 생성

Scanner 객체명 = new Scanner(System.in);

  • 객체명도 변수명과 마찬가지로 개발자 마음이다.
  • import java.util.Scanner; 를 추가해줘야 한다. (package와 class 사이)


System.in

키보드에서 사용자로부터 키 입력을 받기 위해서는 System.in을 사용한다.

지금은 키보드에서 입력을 받는다는 뜻으로 사용한다고 알아두자. 자세한 것은 추후에 배우도록 하자.


import 문 사용

Scanner 클래스를 사용하기 위해서는 프로그램의 class 명 윗줄에 다음과 같이 import문이 필요하다.

import java.util.Scanner;


자바에서 개발자들을 위해 많은 라이브러리를 제공하는데, 사용하기 위해서는 어디에 위치한 것을 사용할 것인지 알려줘야 한다.

import문은 Scanner 클래스의 정확한 경로가 java.util.Scanner라고 알려주는 것이다.



▣ Scanner 클래스의 메소드

Scanner 클래스의 메소드는 다양하지만 입력받을 수 있는 몇 가지만 소개하면 다음과 같다. 각 타입별로 입력받을 수 있다.

주의) 사용한 메소드의 타입에 맞게 입력하지 않으면 에러가 발생한다.


메소드

설명 

 String next()

 입력받은 값을 문자열 타입으로 반환한다.

 byte nextByte()

 입력받은 값을 byte 타입으로 반환한다. 

 short nextShort()

 입력받은 값을 short 타입으로 반환한다. 

 int nextInt()

 입력받은 값을 int 타입으로 반환한다. 

 long nextLong()

 입력받은 값을 long 타입으로 반환한다. 

 float nextFloat()

 입력받은 값을 float 타입으로 반환한다.

 doulbe nextDouble()

 입력받은 값을 double 타입으로 반환한다.

 String nextLine()

 입력받은 라인 전체를 문자열 타입으로 반환한다. ('\n'포함)



◈ 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.Scanner;
 
public class ScannerEx {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("나이를 입력해 주세요.");
        int age = scanner.nextInt(); //정수형만 받는 메소드
        
        System.out.printf("내 나이는 %d세 입니다.",age);        
 
    }//main
 
}//class
                                              Colored By Color Scripter


실행 결과

나이를 입력해 주세요.

25

내 나이는 25세 입니다.




No. 02

 

 

Scanner에서 키 입력받기


기본 입력받기
Scanner는 사용자가 입력하는 값을 공백('\t, '\f', '\r', ' ', '\n')으로 구분하여 읽는다. 탭, 띄어쓰기 등으로 구분하여 읽는다.
프로그램을 실행시키고 콘솔창에 문자열을 입력하고 'Enter'를 누르면 된다.

◈ 예제
"Lee Seoul 25 60.3"을 띄어쓰기로 구분하여 입력하면 Scanner는 "Lee", "Seoul", "25", "60.3"으로 하나씩 읽는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.util.Scanner;
 
public class ScannerEx {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        String name, address;
        int age;
        double weight;
        
        
        System.out.println("이름,주소,나이,체중을 빈칸으로 구분하여 순서대로 입력하세요.");
        name = scanner.next();
        address = scanner.next();
        age = scanner.nextInt();
        weight = scanner.nextDouble();
        
        System.out.printf("당신의 이름은 %s입니다.%n",name);
        System.out.printf("당신의 주소는 %s입니다.%n",address);
        System.out.printf("당신의 나이는 %d세 입니다.%n",age);
        System.out.printf("당신의 체중은 %.1fkg입니다.%n",weight);                
 
    }//main
 
}//class
                                                                             Colored By Color Scripter

실행 결과

이름, 주소, 나이, 체중을 빈칸으로 구분하여 순서대로 입력하세요.

Lee Seoul 25 60.3

당신의 이름은 Lee입니다.

당신의 주소는 Seoul입니다.

당신의 나이는 25세 입니다.

당신의 체중은 60.3kg 입니다.



타입 지정 메서드와 nextLine() 같이 사용하기

위의 예제에서 사용자가 입력한 나이나 체중은 문자열을 입력한 것과 같다. Scanner의 nextInt()나 nextDouble()가 자동으로 문자를 숫자로 변환해 준것이다. 문자를 숫자로 변환하는 수고를 하지 않아도 되지만 입력할 때 입력받을 변수의 타입에 주의해서 입력해야하는 까다로움이 있다.

또한 nextLine() 메서드와 섞어 사용할 경우에 주의해야 한다.


◈ 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.Scanner;
 
public class ScannerEx {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        String name, address;
        int age;
        double weight;
                
        System.out.println("당신의 나이를 입력하세요.");
        age = scanner.nextInt();
        System.out.println("당신의 이름을 입력하세요.");
        name = scanner.nextLine();
                
        System.out.printf("당신의 나이는 %d입니다.%n",age);
        System.out.printf("당신의 이름은 %s입니다.%n",name);
        
    }//main
 
}//class
                                            Colored By Color Scripter


실행 결과

당신의 나이를 입력하세요.

25

당신의 이름을 입력하세요.

당신의 나이는 45입니다.

당신의 이름은 입니다.

위의 예제는 같이 섞어 사용하면 문제가 발생할 수 있다는 것을 보여준다. 프로그램은 분명히 나이를 입력하고 나서 이름을 입력해야 하는데 이름을 입력하기도 전에 프로그램이 종료된다. 그 이유는 사용자가 문자열을 입력하면 마지막에 입력하는 'Enter'값도 같이 입력되기 때문인데 nextInt()와 같이 타입을 지정해서 받는 메소드는 'Enter'값을 무시하고 숫자형식만 받아 변환하여 반환한다. 이때, 컴퓨터 내부에는 'Enter'값이 아직 남아 있다. 남아 있던 'Enter'값이 이름을 입력하는 명령문에서 이름대신 입력된 것으로 인식되어 아무것도 없는 'Enter'값이 name 변수에 저장되었다.

nextLine()은 '\n'값도 받아들이기 때문에 변수에도 저장될 수 있다.



nextLine()으로 입력받아 원하는 값으로 변환하기

위의 예제들에서 봤듯이 타입을 지정해서 입력을 받는 것은 입력시 신경써야하고 섞어 사용하기에 매우 까다롭다. 그래서 차라리 모든 값을 nextLine()으로 입력받아서 적절하게 변환하는 것이 낫다. 그래서 제일 많이 사용하기도 한다.


nextLine()은 입력한 문자열 한라인 전체를 저장한다. 문자열을 입력 할 때 띄어쓰기 등의 빈칸도 포함하여 입력할 수 있는 장점도 있다.

문자열은 String 타입에 저장하여 사용하면 되고 입력한 문자열을 숫자로 변환할 때는 다음과 같은 메소드를 사용하면 된다.

String input = scanner.nextLine();

int num = Interger.parseInt(input); // input에 저장된 숫자형식 문자열을 정수로 변환


◈ 예제1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.Scanner;
 
public class ScannerEx1 {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        String str;
        
        System.out.println("입력하고 싶은 문자열을 입력하세요.");
        str = scanner.nextLine();
        
        System.out.println("[입력한 문자열]");
        System.out.println(str);        
                
    }//main
 
}//class
                                              Colored By Color Scripter

실행 결과

입력하고 싶은 문자열을 입력하세요.

25제 이름은 Lee이고 사는곳은 서울입니다.

[입력한 문자열]

제 이름은 Lee이고 사는곳은 서울입니다.


위와 같이 긴 문자열도 공백을 포함하여 저장할 수 있다.



◈ 예제2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.util.Scanner;
 
public class ScannerEx2 {
 
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        String name, strAge;
        int age;
        
        System.out.println("당신의 이름을 입력하세요.");
        name = scanner.nextLine();
                
        System.out.println("당신의 나이를 입력하세요.");
        strAge = scanner.nextLine();
        age = Integer.parseInt(strAge);
        
        System.out.printf("당신의 이름은 %s입니다.%n",name);
        System.out.printf("당신의 나이는 %d세 입니다.%n",age);
                
    }//main
 
}//class
                                              Colored By Color Scripter


실행 결과

당신의 이름을 입력하세요.

Lee

당신의 나이를 입력하세요.

25

당신의 이름은 Lee입니다.

당신의 나이는 25세 입니다.


위의 예제에서는 정수만 변환하였지만 Float.parseflot(), Double.parsedouble() 등도 있으니 필요할 때 사용하도록 하자.




'JAVA' 카테고리의 다른 글

[Java 13] 산술 연산자  (0) 2017.11.22
[Java 12] 연산자란?  (0) 2017.11.21
[Java 10] 자바의 출력문(println, printf)  (2) 2017.11.19
[Java 09] 형변환(casting)  (0) 2017.11.19
[Java 08] 문자열 - String  (1) 2017.11.18

+ Recent posts