foxpacking

Programming Lessons

Java 언어 Korean

Java 총 정리[26. Random 문제2]

문제 풀기 7

이전 스물 다섯걸음에서 랜덤으로 숫자를 받고 그걸 중복되지 않게 변수 3개에 대입을 하는 문제를 풀어 봤습니다. 이 문제 같은 경우에는 구조를 구현해서 프로그램과 같은 느낌을 주는 문제가 아닌 느낌이 많은 문제입니다. 그럼 이 풀었던 문제를 더 응용을 해서 구조가 있는 문제를 풀어보고 싶으시지 않으신가요? 저는 당연히 구조를 가지고 프로그램을 느낄 수 있는 문제를 해야 한다고 생각을 합니다.

현재 배열의 문제를 해야 하지만 배열을 쓰면 더 좋은 부분을 알기 위해서 스물 다섯걸음과 지금 스물 여섯걸음을 진행을 하고 있는 것을 꼭 참고를 해주시고 그럼 구조적으로 하기 위해 랜덤으로 중복되지 않은 숫자를 변수 3개에 대입을 한 것 + User도 입력을 통해서 숫자를 3개를 입력을 해서 그 랜덤한 숫자와 User가 입력한 숫자를 비교해서 게임과 같이 문제를 진행을 하겠습니다. 이 글을 읽고 문제를 풀고 하신다면 프로그래밍 실력이 향상이 되실 겁니다.

이 문제는 일명 숫자 야구 게임이라고 합니다. 랜덤으로 받은 숫자와 User가 입력한 숫자를 비교하여 서로의 자라와 숫자를 비교해서 자리와 숫자를 모두 맞추면 프로그램이 종료가 되는 게임입니다. 바로 모두를 똑같이 일치를 할 수 없기 때문에 strike와 ball에 개념을 둬서 자리와 숫자 모두 같으면 strike 자리는 다르지만 숫자가 같으면 ball을 하여서 User에게 계속 피드백을 주어서 랜덤 숫자를 자리와 숫자를 모두 맞추는 게임입니다. 한번 문제를 보시고 풀어보신 후에 정답을 확인을 하신다면 이 글은 분명 도움이 되실 겁니다.

숫자 야구 게임

이전에 스물 다섯걸음에서 구현한 중복되지 않고 1~9까지 랜덤하게 숫자를 변수에 대입하는 정답을 활용하여 문제를 더 확장을 한 것입니다. 그리고 User가 입력을 하여 모두 맞출 때까지 계속 반복이 진행이 되는 게임입니다.

게임을 만들고 확인을 하면서 문제에서 제시한 내용이 올바르게 진행이 되어서 문제 없는 피드백과 잘못된 입력에 대한 예외 처리 그리고 종료가 올바르게 진행이 되는 부분을 꼭 확인해 주세요.

※ 정답은 하나가 아닙니다. 문제의 대한 결과가 동작을 한다면 정답입니다. 밑에 나오는 정답은 참고를 하시면 됩니다.

※ 결과에 대한 테스트를 예시로만 하는 것보다 여러가지를 하셔서 생각하는 결과로 나오는 확인을 하시는 것이 더욱 더 좋습니다.

변수숫자야구게임문제1 사진
변수숫자야구게임문제2 사진

위 문제는 설명에 대한 부분을 담고 있습니다.

랜덤하게 받은 3개의 숫자와 User가 입력한 3개의 숫자를 비교하여 strike와 ball로 표현을 해서 모두 맞추면 게임이 종료되는 프로그램을 만들면 됩니다.자세한 내용은 위에 문제를 확인을 하시면 됩니다.

※ 여러 확인을 통해 원하는 결과가 확인을 여러 번을 하셔야 합니다.

위 문제를 Class를 생성하고 Main문에 소스를 구현해 주세요.

실행 관련 걸음 : 다섯 걸음, 여섯걸음

참고해주세요.


import java.util.Random;
import java.util.Scanner;

public class Q7 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Random r = new Random();
		Scanner sc = new Scanner(System.in);
		
		int com1 = r.nextInt(9)+1;
		int com2 = r.nextInt(9)+1;
		int com3 = r.nextInt(9)+1;
		
		while(com1 == com2 || com2 == com3 || com1 == com3) {
			//System.out.println("중복있음");
			com1 = r.nextInt(9)+1;
			com2 = r.nextInt(9)+1;
			com3 = r.nextInt(9)+1;
		}
		
		System.out.println(com1+","+com2+","+com3);
		
		while(true) {
			System.out.print("첫째자리 : ");
			int user1 = sc.nextInt();
			System.out.print("둘째자리 : ");
			int user2 = sc.nextInt();
			System.out.print("셋째자리 : ");
			int user3 = sc.nextInt();
			
			if(user1 < 1 || user1 >9 || user2 < 1 || user2 >9 
					|| user3 <1 || user3 >9) {
				System.out.println("잘못된 입력입니다.");
				continue;
			}
			if(user1 == user2 || user2 == user3 || 
			user1 == user3) {
				System.out.println("잘못된 입력입니다.");
				continue;
			}
			
			int strike = 0;
			int ball = 0;	
			if(user1 == com1) {
				strike++;
			}
			if(user2 == com2) {
				strike++;
			}
			if(user3 == com3) {
				strike++;
			}

			if(user1 == com2 || user1 == com3) {
				ball++;
			}
			if(user2 == com1 || user2 == com3) {
				ball++;
			}
			if(user3 == com1 || user3 == com2) {
				ball++;
			}
			
			if(strike == 0 && ball == 0) {
				System.out.println("Out입니다.");
			}
			else if(strike == 3) {
				System.out.println("홈런입니다.");
				break;
			}
			else {
				System.out.println("strike : "+strike+
				", ball : "+ball);
			}
			
		}
		
	}
}

        

생각을 해보기

이전 문제를 활용하여 구조적인 부분을 추가한 게임 문제입니다. 모든 문제를 만들어 푸실 때 꼭 완성도가 있게 프로그램을 구현을 하셔야 합니다. 그래서 이번 문제는 그 문제에 일치를 한다고 생각을 합니다. 효율적이지 않아도 끝까지 풀어보시면 분명히 도움이 되실 수 있습니다.

※ 참고로 이 문제를 배열로 하면 어떻게 구현을 하면 되는지 생각을 하시면 좋습니다.

Dolphin

About Author

Leave a comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

You may also like

Korean Programming 기초

IT 개발자 VS 프로축구선수 비교?

IT 개발자와 프로축구선수의 같은 점과 다른 점? 프로그래밍 공부를 하시면서 개발자로 취업을 하려고 하는데 과연 취업을 할 수 있을까? IT
Korean 클라우드

AWS 로그인 불가능, AWS고객 센터 이메일 문의 결과는?

AWS 고객센터 이메일 문의 솔직후기 AWS를 사용하기 위해 로그인을 하는 경우 이메일로 코드 번호를 보내지만 이메일로 받을 수 없는 상황이거나