문제 풀기 8
스물 일곱걸음에서 변수로 숫자 야구 게임을 만들어 봤습니다. 이제 변수를 사용을 한 것을 배열을 통해서 구현을 해는 것이 필요하겠죠? 당연히 저 또한 숫자 야구 게임을 좀 더 간결한 구조를 통해서 만들어 보면 좋을 것이라고 생각을 하고 있습니다.
Com의 랜덤 값을 받는 변수랑 User에 입력을 받는 변수를 배열을 통해서 구현을 할 수 있도록 해봐야 합니다. 입력에 대한 방법이 변경되거나 랜덤값을 만드는 부분도 배열에 의해서 수정되고 좀 더 간결한 소스가 될 수 있습니다. 이 글을 읽으신다면 배열의 좋은 점을 알 수가 있습니다.
배열 숫자 야구 게임입니다. 게임에 대한 설명은 이전 문제에서 많이 들였기 때문에 이전 걸음을 꼭 보고서 오신다면 문제가 없을 것입니다. 중복이 되지 않는 랜덤값을 배열 변수에 넣어주고 3개의 중복이 되지 않는 입력을 배열 변수에 넣어주고 전체적인 게임이 배열에 의해서 소스가 달리 집니다. 이 글을 통해서 변수에서 배열로 달라지면 좋은 점이 무엇인지 확인을 하시면 좋을 것 같습니다.
배열 숫자 야구 게임
1~9까지 랜덤하게 숫자를 배열에 대입하는 정답을 활용하여 문제를 더 확장을 한 것입니다. 그리고 User가 입력을 배열에 저장하고 모두 맞출 때까지 계속 반복이 진행이 되는 게임입니다.
게임을 만들고 확인을 하면서 문제에서 제시한 내용이 올바르게 진행이 되어서 문제 없는 피드백과 잘못된 입력에 대한 예외 처리 그리고 종료가 올바르게 진행이 되는 부분을 꼭 확인해 주세요.
※ 정답은 하나가 아닙니다. 문제의 대한 결과가 동작을 한다면 정답입니다. 밑에 나오는 정답은 참고를 하시면 됩니다.
※ 결과에 대한 테스트를 예시로만 하는 것보다 여러가지를 하셔서 생각하는 결과로 나오는 확인을 하시는 것이 더욱 더 좋습니다.
위 문제는 스물 여섯걸음과 같습니다.
랜덤하게 받은 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);
}
}
}
}
생각을 해보기
이전 문제를 활용하여 배열을 사용해서 똑같은 문제를 푸는 것입니다. 모든 문제를 만들어 푸실 때 꼭 완성도가 있게 프로그램을 구현을 하셔야 합니다. 그래서 이번 문제는 그 문제에 일치를 한다고 생각을 합니다. 효율적이지 않아도 끝까지 풀어보시면 분명히 도움이 되실 수 있습니다.
※ 참고로 이 문제를 배열로 하면 어떻게 구현을 하면 되는지 생각을 하시면 좋습니다.
함께 보면 좋은 글
§ Java 첫 걸음 변수와 자료형§ Java 두 걸음 연산자
§ Java 세 걸음 형 변환
§ Java 네 걸음 Eclipse 설치
§ Java 다섯 걸음 Eclipse 개발 준비
§ Java 여섯 걸음 출력
§ Java 일곱 걸음 출력
§ Java 여덟 걸음 문제 풀기 1
§ Java 아홉 걸음 한글 깨짐
§ Java 열 걸음 제어문
§ Java 열 한걸음 if문
§ Java 열 두걸음 switch문
§ Java 열 세걸음 while문
§ Java 열 네걸음 for문
§ Java 열 다섯걸음 중첩 및 주의 사항
§ Java 열 여섯걸음 문제 1
§ Java 열 일곱걸음 문제 2
§ Java 열 여덟걸음 break continue
§ Java 열 아홉걸음 random
§ Java 스물 걸음 별 찍기 1
§ Java 스물 한걸음 별 찍기 2
§ Java 스물 두걸음 가위 바위 보 게임
§ Java 스물 세걸음 배열
§ Java 스물 네걸음 배열 활용
§ Java 스물 다섯걸음 Rando 활용 문제
§ Java 스물 여섯걸음 숫자 야구 게임