백엔드/Java

Java Scanner 클래스

짱뚱짱 2024. 9. 26. 12:37

📢 Scanner 클래스

Scanner 클래스는 콘솔에서 값을 입력받을 수 있게 도와주는 클래스이다. (예제 풀때 많이 등장)

  • 객체 생성: Scanner scan = new Scanner(System.in);
  • 입력 대기: scan.nextLine();을 사용하여 사용자가 입력할 때까지 대기
  • close로 닫아주지 않아도 에러가 나진 않지만, 스캐너 클래스를 더이상 사용하지 않을 땐 닫아줘야 리소스 낭비가 없다.
  • close를 작성하면 import문도 자동으로 작성되므로, scanner 클래스를 쓸 땐 꼭 close를 같이 써주자
Scanner scan = new Scanner(System.in);

.....
...
..
.

scan.close();
Scanner scan = new Scanner(System.in);
System.out.println("숫자를 입력해주세요 >> ");
int num = scan.nextInt();
System.out.println("내가 입력한 수 >> " + num);
  • nextInt 메서드를 쓰면, 콘솔창에 입력을 받을 수 있도록 활성화가 되고, 정수를 입력받을 수 있다.
  • nextInt는 정수만 입력받을 수 있으므로, 정수가 아닌 다른 타입의 데이터를 입력하면 에러가 난다.
  • 띄어쓰기나 엔터를 치면 입력을 종료한 것으로 간주한다.

결과

숫자를 입력해주세요 >> 24
내가 입력한 수 >> 24


System.out.println("문자를 입력해주세요 >> ");
String str = scan.next(); // 한 단어만 입력 (공백 허용X)
System.out.println("내가 입력한 문자 >> " + str);
  • String으로 입력받고 싶다면 next를 사용하여 입력받을 수 있다. 대신 nextInt처럼, 띄어쓰기나 엔터를 치면 입력이 종료되므로 한 단어만 가능하다.

결과

문자를 입력해주세요 >> ㅇㅇㅇ
내가 입력한 문자 >> ㅇㅇㅇ


  • 만일 공백을 포함한 여러 단어를 입력받고 싶다면, nextLine 메서드를 사용하면 된다. nextLine은 한 줄 전체를 입력받는 메서드로, 엔터키를 누를 때까지 모든 문자열을 읽는다.
  • 하지만 앞에서 nextInt나 next로 입력을 받은 후에는 개행문자(엔터)가 남아있을 수 있는데, 이걸 남아있는 입력으로 인식해서 입력을 받지 못한 채 넘어갈 수 있다. 그럴 땐 그냥 nextLine을 호출하여 엔터를 처리해 준다.
scan.nextLine(); // 위에서 입력한 enter 처리용
System.out.println("여러 단어를 입력해주세요 >> ");
String str2 = scan.nextLine(); // 공백 포함
System.out.println("내가 입력한 문자 >> " + str2);

결과

여러 단어를 입력해주세요 >> 태양의 마테차
내가 입력한 문자 >> 태양의 마테차


System.out.println("소수점 포함 실수 입력 >> ");
double num2 = scan.nextDouble();
System.out.println("내가 입력한 수 >> " + num2);

결과

소수점 포함 실수 입력 >> 3.14
내가 입력한 수 >> 3.14


  • Scanner로 한글자만 입력받고 싶은 경우도 있을 것이다. (예를 들면 종료 하시겠습니까? y/Y)
  • char로 입력받으면 될 것 같지만, Scanner로 직접 char로 입력을 받을 수 있는 방법은 없다.
  • String 문자의 인덱스를 이용해서 첫글자만 받도록 할 수가 있다.
System.out.println("한글자 입력 >> ");
char c = scan.next().charAt(0);
System.out.println("내가 입력한 글자 >> " + c);
  • String 문자는 한글자마다 index를 가지고 있다. (0부터 시작)
  • next() 메서드는 String으로 return을 해주고, charAt()메서드는 그 String의 인덱스 중 한글자를 추출해준다.

결과

한글자 입력 >> 로로로
내가 입력한 글자 >> 로

 

📢 실습

주사위 게임 만들기

- 주사위를 던져 30칸을 이동

- 주사위를 던질 때마다 이동 거리를 출력, 최종적으로 도착했을 때 총 던진 횟수 출력

import java.util.Scanner;

public class Test03 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in); // Scanner 객체 생성
        int sum = 0; // 누적 거리
        int count = 0; // 던진 횟수
        int last = 30; // 목표 거리
        int random = 0;

        System.out.println("게임 시작~!! 주사위를 던져주세요.(enter)");

        // 주사위를 30칸 이동할 동안 반복
        while (sum < last) {
            scan.nextLine(); // Enter 입력 대기
            random = (int) (Math.random() * 6) + 1; // 1부터 6까지 랜덤 숫자 생성
            sum += random; // 누적 거리 업데이트
            count++; // 던진 횟수 증가
            System.out.println("주사위: " + random);
            
            // 남은 거리 출력
            System.out.println(random + "칸 전진 => " + ((last - sum) <= 0 ? "도착~~~!!" : (last - sum) + "칸 남았습니다."));
        }

        System.out.println("도착~!!, 총 이동횟수 : " + count);
        scan.close(); // Scanner 객체 닫기
    }
}

 

 

결과

게임 시작~!! 주사위를 던져주세요.(enter)
주사위를 던지기(enter) >>
주사위: 4
4칸 전진 => 26칸 남았습니다.

주사위를 던지기(enter) >>
주사위: 2
2칸 전진 => 24칸 남았습니다.

주사위를 던지기(enter) >>
주사위: 6
6칸 전진 => 18칸 남았습니다.

주사위를 던지기(enter) >>
주사위: 3
3칸 전진 => 15칸 남았습니다.

주사위를 던지기(enter) >>
주사위: 5
5칸 전진 => 10칸 남았습니다.

주사위를 던지기(enter) >>
주사위: 4
4칸 전진 => 6칸 남았습니다.

주사위를 던지기(enter) >>
주사위: 6
6칸 전진 => 도착~~~!!

도착~!!, 총 이동횟수 : 7

 

'백엔드 > Java' 카테고리의 다른 글

Java로 계산기 만들기  (1) 2024.09.28
Java 메서드 (Method)  (1) 2024.09.26
Java 배열, 문자열 처리  (2) 2024.09.26
Java 기초 다지기: 변수, 데이터 타입, 연산자  (2) 2024.09.26
개발 환경 세팅  (4) 2024.09.25