야구게임에 배열을 적용해보자 ! !
- 빠른실습을 위해 com의 숫자를 먼저 출력 해보았다.
- 주석에 상세설명을 추가하였다.
package arrayex;
import java.util.Scanner;
/*
규칙 : 1~9 사이의 중복되지 않은 랜덤한 3자리 숫자 맞추기
com : 135
user : 234 => 1Strike 2Out( 3이 숫자,자리수 모두 맞음)
user : 379 => 1Ball 2Out ( 3이 숫자만 맞음)
user : 678 => 3Out ( 맞음 없음)
user : 135 => 3Strike (모두 맞음, 게임 종료 )
*/
public class baseballa {
public static void main(String[] args) {
// while문에서 선언하면 지역변수가 되어버리기 때문에 전역변수로 선언해줌
int com[] = new int[3];
int user[] = new int[3];
Boolean check=false;
while(true) {
// -0~9미만의 double 형태의 난수를 반환 (*9로 인해)
// -(int) 형번환으로 인해 소수점 이하를 버리고 정수만 취하는데
// 8까지 취하므로 +1하여 9까지 취할 수 있음
// 랜덤한 값을 3개 받음
for (int i=0; i<com.length; i++) {
com[i] = (int)(Math.random()*9)+1;
System.out.println("com의 숫자는 "+ com[i]);
}
// 함수실행하여 값이 같은지 판단해줌
System.out.println();
check = isCheck(com);
if(!check) {
break;
}
}
//입력받을 수 있도록 해줌
Scanner sc =new Scanner(System.in);
String s[] = {"첫","두","세"};
while(true) {
int strike = 0, ball = 0, out = 0;
// 입력받아줄 수 있게 해줌
// nextInt : 공백이나 엔터 기준으로 넣어줌
for (int i = 0; i<user.length; i++) {
System.out.println(s[i]+"번째 숫자를 넣으세요");
user[i]=sc.nextInt();
}
check = isCheck(user);
// 함수에서 값이 같으면 true가 리턴되어 온다
// System.out.println("check = " +check);
// check 값은 true값이 리턴되었기 때문에 중복값이라는 것을 확인할 수 있음
if(check) {
System.out.println("중복값을 넣지마세요 !");
// 다시 for문을 실행시킴
continue;
}
// user와 com의 값을 비교
for (int i =0; i<com.length; i++) {
for (int j=0; j<user.length; j++) {
// com과 user의 배열위치의 값이 같을때 실행됨
if (com[i] == user[j]) {
// 배열 안의 값이 같을때
if(i==j) {
strike++;
} else {
ball++;
}
}
}
}
out = 3 - (strike + ball);
System.out.printf("== %s 스트라이크, %s 볼, %s 아웃 == \n",strike,ball,out);
System.out.println("============================");
if (strike ==3) {
break;
}
}
System.out.println("스트라이크 아웃이다!!");
}
// 배열로 받아와서 입력값이 같은가를 판단
// 중복값이 있을 시 true, 다를 시 false를 출력
static boolean isCheck(int[] n) {
boolean check = false;
if((n[0]==n[1] || n[0]==n[1] || n[1]==n[2])) {
check = true;
}
return check;
}
}
결과값 :
