본문 바로가기

Java/실습

[Java] Up Down 대회

Up Down 카운트를 맞추는 대회가

있다고 가정해봅시다.

참가자는 나와 친구,

그리고 결과를 판정해주는 심판이 있습니다.

나와 친구가 각각 정답을 입력하면

심판이 판단해서 Up! 혹은 Down을 말해줍니다.

마지막에는 승자와 시도 횟수를 출력합니다.

 

먼저 나, 친구, 심판의 클래스를 각각 만들어줍니다.

import java.util.Scanner;

 

public class Self {

String name = "김래현";

Scanner sc = new Scanner(System.in);

public int askAnswer() {

System.out.println("1~100까지 하나 입력하세요");

int num = sc.nextInt();

return num;

}}

 

나에 해당하는 Self클래스는

내 이름의 멤버 변수와

내 정답을 받아서 리턴하는

메소드가 존재합니다.

 

import java.util.Random;

public class Friend {

Random r= new Random();

public int rollNumber() {

return r.nextInt(100) + 1;

}

}

 

친구의 경우는 정답을 입력받는 것이 아닌

정답을 정해놓고 플레이하기 때문에

랜덤한 정수를 리턴하는 메소드만 구현하면 됩니다.

주 기능은 심판 클래스에 있는데 

코드가 좀 길어서 한 줄씩 뜯어보겠습니다.

 

public void start() {

System.out.printf("%s분 입장해주세요.\n", s.name);

System.out.println("UP DOWN게임 시작하겠습니다.");

}

 

먼저 시작하는 메소드인데

나의 이름과 시작한다는 출력문을 포함하고 있습니다.

 

public void UpDown (int n, int answer) {

while(true) {

answer = s.askAnswer();

if(answer < n) {

System.out.println("UP!");

count ++;

}else if(answer > n) {

System.out.println("DOWN!");

count ++;

}

else {

winner = "나";

System.out.println("나의 승리입니다!");

break;

}

다음은 Up Down을 판변하는 메소드입니다.

정답과 나의 답을 비교하여 Up Down을 출력하고

count를 증가 시켜 시도 횟수를 나타냅니다.

나의 정답과 답이 일치할 경우

우승자 변수에 나를 넣어줍니다.

 

System.out.println("친구의 답은 :" + friendNum);

if(friendNum < n) {

friendNum += r.nextInt(100 - friendNum) + 1;

friend_count ++;

continue;

}else if(friendNum > n) {

friend_count ++;

friendNum = r.nextInt(friendNum--) + 1;

continue;

}

else {

winner = "친구";

System.out.println("친구의 승리입니다!");

break;

}

}

 

친구의 답도 마찬가지로 정답과 비교합니다.

friendNum = r.nextInt(100 - friendNum + 1) + friendNum;

friendNum = r.nextInt(friendNum--) + 1;

여기서 중요한 점은 친구의 답이 작을 경우

100에서 친구의 숫자를 뺸값에 1을 더하고

이 수를 랜덤수를 돌려서 친구의 숫자에 더하면

친구의 숫자가 기존 숫자보다 1큰 값이

랜덤으로 돌려서 나오게 됩니다.

반대로 친구의 숫자가 크면 

친구의 숫자를 1 감소시켜서 

랜덤을 돌려서 

친구의 숫자에 넣어줍니다.

 

if(winner == "나") {

System.out.println("나의 시도 횟수 : " + count);

} else {

System.out.println("친구의 시도 횟수 : " + friend_count);

}}}

 

winner 변수를 다르게 한 이유는

승자에 따라서 출력을 다르게 하기 위함입니다.

내가 이기면 나의 카운트를 출력하고

친구가 이기면 친구의 카운트를 출력합니다.

 

public void play() {

start();

int answer = 0;

UpDown(answer_number, answer);

}

play()를 통해서 전체 메소드를 실행합니다.

 

 

 

출력 내용 ▼

 

=========================

김래현분 입장해주세요.

UP DOWN게임 시작하겠습니다.

1~100까지 하나 입력하세요

5

UP!

친구의 답은 :27

1~100까지 하나 입력하세요

100

DOWN!

친구의 답은 :21

1~100까지 하나 입력하세요

70

DOWN!

친구의 답은 :19

친구의 승리입니다!

친구의 시도 횟수 : 2

=========================

 

감이 좋은 친구네요.

지난번에 실습한

Up Down게임에서

친구와 함께하는 상황을 

설정했는데요.

친구의 숫자가 Up 또는 Down

일 경우에 친구의 숫자도

유동적으로 바꿔줘야해서

어려웠던 것 같습니다.

 

'Java > 실습' 카테고리의 다른 글

[Java] 배열의 유사도  (0) 2024.12.10
[Java] 가위바위보 대회  (0) 2024.12.10
[Java] 동전 홀 짝 맞추기  (0) 2024.12.10
[Java] 환자의 BMI 구해주기  (2) 2024.12.06
[Java] 기본값  (0) 2024.12.06