📢 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 |