1. Scanner 클래스


# 콘솔 창으로부터 데이터 입력받기

# JDK 1.5버전부터 추가되었다. 

# 입력하라는 안내문구는 System.out.print();를 사용하여 개행하지 않는 것이 좋음


1) import java.util.Scanner;

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

3) 안내문을 보여주자! 

System.out.print("나이를 입력하세요: ");


4) int age = sc.nextInt();

5) sc.close();


    sc.next()                : 단어

    sc.nextInt()            : 정수

    sc.nextDouble()     : 실수

    * 버퍼에서 하나씩 가져옴 

    -----------------------

    sc.nextLine()          : 문장

    * 버퍼에서 한 번에 다 가져옴 


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
28
29
package scannerex;
 
import java.util.Scanner;
 
public class ScannerTest01 {
    public static void main(String[] args) {
 
        Scanner sc = new Scanner(System.in);
        
        // Scanner 클래스는 숫자, 영문을 입력할 때는 그대로 입력 가능
        // 한글을 입력할 때에는 마우스로 커서를 이동시킨 후 입력! 
        // 입력을 받고자 할 때는 print()를 사용하여 개행시키지 않는 것이 좋다. 
        System.out.print("이름을 입력하세요: ");
        String name = sc.next();
        System.out.println("입력하신 이름은 " + name + "입니다.");
        
        System.out.print("나이를 입력하세요: ");
        int age = sc.nextInt();
        System.out.println("입력하신 나이는 " + age + "세 입니다.");
        
        System.out.print("키를 입력하세요: ");
        double height = sc.nextDouble();
        System.out.println("입력하신 키는 " + height + "cm 입니다.");
        
        // Scanner 끝내기
        sc.close();
        
    }
}
cs



5) next() VS nextLine()

# 단어들 사이의 공백을 기준으로 단어와 문장이 나뉜다.

# In Buffer > 서울시 / 마포구 / 서강로

   sc.next() > 서울시

   sc.nextLine() > 서울시 마포구 서강로


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package scannerex;
 
import java.util.Scanner;
 
public class ScannerTest02 {
    public static void main(String[] args) {
 
        Scanner sc = new Scanner(System.in);
        System.out.print("주소를 입력하세요: ");
        
//    String address = sc.nextLine();
        String address = sc.next();
        
        System.out.println(address);
        System.out.println(sc.next());
        System.out.println(sc.next());
    }
}
cs

# 설명

nextLine()은 버퍼에 있는 '서울시 마포구 연남동'을 한 번에 다 가져오지만 

next()의 경우 단어 사이의 공백을 기준으로 하나씩 가져온다. 

ex. 서울시 / 마포구 / 연남동



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
28
29
package scannerex;
 
import java.util.Scanner;
 
public class ScannerTest03 {
    public static void main(String[] args) {
 
        Scanner sc = new Scanner(System.in);
        
//    System.out.print("이름: ");
//    String name = sc.nextLine();
//        
//    System.out.print("나이: ");
//    int age = sc.nextInt();
//        
//    System.out.println(name + "님은 " + age + "세 입니다.");
        
        System.out.print("나이: ");
        int age = sc.nextInt();
 
        sc.nextLine();    // 버퍼에 남아있는 엔터값 제거
        
        System.out.print("이름: ");
        String name = sc.nextLine();
        
        System.out.println(name + "님은 " + age + "세 입니다.");
        
    }
}
cs

# 설명

이름 > 나이 순으로 진행할때는 출력문이 정상적으로 출력되지만,

나이 > 이름 순으로는 이름을 입력하지 못하고 비정상적으로 출력된다. 


나이를 입력하고 Enter를 쳤을 경우에 버퍼에는 '나이 / Enter' 이 들어있다. 

나이는 nextInt()로 출력이 되었지만 이름을 작성하기도 전에 

nextLine()에서는 버퍼의 Enter를 데이터로 받아와서 출력한다. 

때문에 이름을 작성하기도 전에 최종 출력문이 나오는 것이다. 


따라서 String name = sc.nextLine(); 이 Enter값을 받기 전에 

중간에서 미리 sc.nextLine();을 해주어 Enter값을 제거하도록 한다.  





6) int age = (int)String; 

# 참조형 String은 기본형 타입으로 형 변환 안 됨


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
package scannerex;
 
import java.util.Scanner;
 
public class ScannerTest04 {
    public static void main(String[] args) {
        
        // 번거로움을 덜하기 위해 nextLine()만 사용하기 위해 형 변환! 
        Scanner sc = new Scanner(System.in);
        
        System.out.print("나이 입력: ");
        int age = Integer.parseInt(sc.nextLine());
        
        System.out.print("이름 입력: ");
        String name = sc.nextLine();
        
        System.out.print("키 입력: ");
        double height = Double.parseDouble(sc.nextLine());
        
        System.out.println("나이: " + age);
        System.out.println("이름: " + name);
        System.out.printf("키: %.1f", height);    // %.1f > 반올림! 
        
    }
}
cs

'JAVA > JAVA1' 카테고리의 다른 글

JAVA1_day07 | 조건문 if문 연습문제 (1)  (1) 2017.12.19
JAVA1_day06 | 조건문 If문  (0) 2017.12.19
JAVA1_day05 | 추가공부  (0) 2017.12.14
JAVA1_day05 | 연산자  (0) 2017.12.13
JAVA1_day04 | 추가공부  (0) 2017.12.12