foxpacking

Programming Lessons

IT이야기 Java 언어 Korean

Java 총 정리[27. 배열 Random 문제]

문제 풀기 8

스물 일곱걸음에서 변수로 숫자 야구 게임을 만들어 봤습니다. 이제 변수를 사용을 한 것을 배열을 통해서 구현을 해는 것이 필요하겠죠? 당연히 저 또한 숫자 야구 게임을 좀 더 간결한 구조를 통해서 만들어 보면 좋을 것이라고 생각을 하고 있습니다.

Com의 랜덤 값을 받는 변수랑 User에 입력을 받는 변수를 배열을 통해서 구현을 할 수 있도록 해봐야 합니다. 입력에 대한 방법이 변경되거나 랜덤값을 만드는 부분도 배열에 의해서 수정되고 좀 더 간결한 소스가 될 수 있습니다. 이 글을 읽으신다면 배열의 좋은 점을 알 수가 있습니다.

배열 숫자 야구 게임입니다. 게임에 대한 설명은 이전 문제에서 많이 들였기 때문에 이전 걸음을 꼭 보고서 오신다면 문제가 없을 것입니다. 중복이 되지 않는 랜덤값을 배열 변수에 넣어주고 3개의 중복이 되지 않는 입력을 배열 변수에 넣어주고 전체적인 게임이 배열에 의해서 소스가 달리 집니다. 이 글을 통해서 변수에서 배열로 달라지면 좋은 점이 무엇인지 확인을 하시면 좋을 것 같습니다.

배열 숫자 야구 게임

1~9까지 랜덤하게 숫자를 배열에 대입하는 정답을 활용하여 문제를 더 확장을 한 것입니다. 그리고 User가 입력을 배열에 저장하고 모두 맞출 때까지 계속 반복이 진행이 되는 게임입니다.

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

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

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

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

위 문제는 스물 여섯걸음과 같습니다.

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

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

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

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

참고해주세요.





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

public class Q8 {


	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// TODO Auto-generated method stub
		Random r = new Random();
		Scanner sc = new Scanner(System.in);
		
		int[] com = new int[3];
		
		for(int i = 0;i<com.length;i++) {
			com[i] = r.nextInt(9)+1;
			for(int j =0;j<i;j++) {
				if(com[i] == com[j]) {
					i--;
					break;
				}
			}
		}
		
		System.out.println(com[0]+","+com[1]+","+com[2]);
		
		int[] user = new int[3];
		
		while(true) {
			
			for(int i = 0;i<user.length;i++) {
				System.out.print((i+1)+"번째 숫자 : ");
				user[i] = sc.nextInt();
				//범위 1~9아닌경우
				if(user[i]<1 || user[i] > 9) {
					System.out.println("잘못된"+
				"입력입니다.");
					i--;
					continue;
				}
				for(int j = 0;j<i;j++) {
					if(user[i] == user[j]) {
						System.out.println("잘못된"+
				입력입니다.");
						i--;
						break;
					}
				}
			}
			
			int strike = 0;
			int ball = 0;
			
			for(int i = 0;i<user.length;i++) {
				for(int j = 0;j<com.length;j++) {
					if(user[i] == com[j]) {
						if(i == j) {
							strike++;
						}
						else {
							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를 사용하기 위해 로그인을 하는 경우 이메일로 코드 번호를 보내지만 이메일로 받을 수 없는 상황이거나