반응형
# 목적
: JAVA의 do-while문과 Math.random() 메소드, Scanner를 이용하여 랜덤 숫자 1개의 정답을 찾아가는 초간단 게임 구현
do-while 반복문의 특징
: do와 while 사이에 있는 실행문을 최초로 한 번 실행 후
while의 조건 충족 시 do에 있는 내용을 반복 실행 시키고,
while의 조건 미충족 시 while 다음에 입력한 내용을 실행 시킨다.
# 코드 작성 예시
< 정답 조건 : 1~100 사이의 랜덤 숫자 >
public class DoWhileRandom {
public static void main(String[] args) {
//1. 1~100 랜덤숫자 변수 저장
int answer = (int) (Math.random()*100) +1;
int input = 0;
//2. 스캐너 입력 & 문제를 출제하는 텍스트 출력
Scanner sc = new Scanner(System.in);
System.out.print("1과 100 사이의 정수를 입력하세요.");
System.out.println(" (정답 : " + answer + ")"); //정답 미리 알고 싶을 때 사용
//3. do - 정답 틀렸을 경우 출력될 내용
do {
input = sc.nextInt(); //최초로 한 번 실행
if (input > answer) {
System.out.println("더 작은 수로 입력하세요.");
} else if (input < answer) {
System.out.println("더 큰 수로 입력하세요.");
}
//4. while 조건 입력
} while (input != answer);
System.out.println("정답입니다.");
sc.close();
}
}
- 콘솔 창 결과 :
1과 100 사이의 정수를 입력하세요. (정답 : 63)
80
더 작은 수로 입력하세요.
60
더 큰 수로 입력하세요.
70
더 작은 수로 입력하세요.
65
더 작은 수로 입력하세요.
63
정답입니다.
❓ 개인적으로 여기서 엄청 헷갈렸던 게
while의 조건을 도대체 왜 (input == answer) 이 아닌
(input != answer) 로 입력해야 하냐는 거였다.(?? : input과 answer이 같아야 정답인 거잖아..?)
📌 그런데 특징을 자세히 살펴보면 이 궁금증을 금방 해결할 수 있다.
- while 뒤에 오는 조건 'input != answer' 이 맞을 때, (= 입력한 값과 정답이 다를 때)
while 앞에 있는 do의 내용을 계속해서 실행시키고, - while 뒤에 오는 조건 'input != answer'이 틀릴 때, (= 입력한 값과 정답이 같을 때)
do 내용을 빠져나와 while 뒤에 입력한 내용 '정답입니다.' 가 실행된다는 것이다.
👉 한마디로 만약 조건을 (input == answer) 로 둔다면,
해당 조건이 틀릴 때 ! (=입력한 값 'input'과 정답 'answer'이 같지 않을 때)
while 뒤에 입력한 내용 '정답입니다' 가 실행되버린다는 것.
정답이 아니더라도 아무 숫자나 한 번 입력하면 바로 do 내용을 빠져나와버린다는 말이다.
(휴.. 정리하기 힘들다)
* Math.random() 메소드에 대해 알고 싶다면 아래 링크 클릭!
링크 : Math.random() 랜덤 함수
< 해당 글은 velog에서 이전하며 옮겨온 글로, 가독성이 좋지 않을 수 있는 점 양해 부탁드립니다. >
🔗 velog 버전 보기 : https://velog.io/@ryuneng2/Java-do-while-랜덤숫자맞추기게임
'BackEnd > Java' 카테고리의 다른 글
[Java] 원시타입(Primitive type)과 참조타입(Reference type) - 용어 정리 (0) | 2025.01.15 |
---|---|
[Java] for문 / while문을 이용한 무한 루프 작성과 탈출하는 방법 (0) | 2025.01.15 |
[Java] 삼항 연산자를 이용해 학점 환산하기 (0) | 2025.01.15 |
[Java] 중첩 for문을 이용한 구구단 자동 출력 (0) | 2025.01.15 |
[Java] Math.random()을 이용하여 주사위 던지기 (if문, switch문 각각 사용 예시) (0) | 2025.01.15 |