확실히 학원에서 해설이 훨씬 깔끔해 보인다.. 참고하고 깔끔하게 짜보도록해야겟다.
학원 해설 버전
package baseball;
import java.util.Scanner;
public class baseballMethod {
public static void main(String[] args) {
/*
* 2군데 이상 필요하면 메인에 선언되어있는것이 좋다
*
* 1. 초기화
*
* 2. random 산출
*
* //////////////////// loop
*
* 3. user input
*
* 4. 판정
*
* 5. 메시지
*
* ///////////////////// 6. 결과
*
*/
int r_num[], u_num[];
boolean clear;
// int count = 0;
// 초기화
r_num = new int[3];
u_num = new int[3];
clear = false;
// 2. random 산출
ballRandom(r_num);
int w = 0;
while (w < 10) {
// 3. user input
u_num = userInput(u_num);
//4. 판정
int message[] = new int[2];
clear = finding(r_num, u_num, message);
if(clear) break;
// 5.메시지
System.out.println(message[0] + "스트라이크 " + message[1] + "볼입니다.");
w++;
}
// 6. 결과
if(clear) {
System.out.println("Game Clear!!");
} else {
System.out.println("Game Over..");
}
}
static void ballRandom(int r_num[]) {
boolean _switch[] = new boolean[10]; // 스위치를 넣어서 중복을 방지해주는 코드
int w, r;
_switch[0] = true;
w = 0;
while (w < 3) {
r = (int) (Math.random() * 10);
if (_switch[r] == false) {
_switch[r] = true; // fftff fffff
r_num[w] = r + 1; // 1 ~ 10
w++;
}
}
for (int i = 0; i < r_num.length; i++) {
System.out.println("r_num[" + i + "] = " + r_num[i]);
}
}
// 사실 리턴받을 필요는 없다
static int[] userInput(int unum[]) {
Scanner scanner = new Scanner(System.in);
while (true) {
for (int i = 0; i < unum.length; i++) {
System.out.println((i + 1) + "번째 수 = ");
unum[i] = scanner.nextInt();
}
if (unum[0] != unum[1] && unum[0] != unum[2] && unum[1] != unum[2]) {
break;
}
System.out.println("중복된 숫자가 있습니다");
}
return unum;
}
static boolean finding(int rnum[], int unum[], int message[]) {
int strike = 0, ball = 0;
// ball
for (int i = 0; i < rnum.length; i++) {
for (int j = 0; j < rnum.length; j++) {
if (rnum[i] == unum[j] && i != j) {
ball++;
}
}
}
// strike
for (int i = 0; i < rnum.length; i++) {
if (rnum[i] == unum[i]) {
strike++;
}
}
message[0] = strike;
message[1] = ball;
if(strike > 2) {
return true;
}
return false;
}
}
내가 짠 버전
import java.util.Scanner;
public class ex07 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int r_num[], u_num[];
boolean clear;
int strike, ball;
strike = 0;
ball = 0;
int count = 0;
// 1.초기화
r_num = new int[3];
u_num = new int[3];
clear = false;
// 2. 랜덤함수 생성
r_num = randomCreate(r_num);
main(u_num, r_num, strike, ball, count, clear);
}
public static void main(int[] u_num, int[] r_num, int strike, int ball, int count, boolean clear) {
int w = 0;
while (w < 10) {
// 3.user input
u_num = userInput(u_num);
// 4.finding
// ball
strike = ball = 0;
ball = ballCount(r_num, u_num, ball);
// strike
strike = strikeCount(r_num, u_num, strike);
// 판정
if (strike > 2) {
count = w + 1;
clear = true;
break;
}
count ++;
System.out.println(clear);
System.out.println(count);
// 메시지
System.out.println(strike + "스트라이크 " + ball + "볼입니다.");
if(result(count, clear)){
break;
}
w++;
}
}
// 랜덤값 주입
public static int[] randomCreate(int[] r_num) {
// 2.random
boolean _switch[] = new boolean[10]; // 스위치를 넣어서 중복을 방지해주는 코드
for (int i = 0; i < _switch.length; i++) {
_switch[i] = false;
}
int w = 0;
int r = 0;
while (w < 3) {
r = (int) (Math.random() * 10);
if (_switch[r] == false) {
_switch[r] = true; // fftff fffff
r_num[w] = r + 1; // 1 ~ 10
w++;
}
}
for (int i = 0; i < r_num.length; i++) {
System.out.println("r_num[" + i + "] = " + r_num[i]);
}
return r_num;
}
// 유저값 입력
private static int[] userInput(int[] u_num) {
Scanner scanner = new Scanner(System.in);
while (true) {
for (int i = 0; i < u_num.length; i++) {
System.out.println((i + 1) + "번째 수 = ");
u_num[i] = scanner.nextInt();
}
if (u_num[0] != u_num[1] && u_num[0] != u_num[2] && u_num[1] != u_num[2]) {
break;
}
System.out.println("중복된 숫자가 있습니다");
}
return u_num;
}
private static int ballCount(int[] r_num, int[] u_num, int ball) {
for (int i = 0; i < r_num.length; i++) {
for (int j = 0; j < r_num.length; j++) {
if (r_num[i] == u_num[j] && i != j) {
ball++;
}
}
}
return ball;
}
private static int strikeCount(int[] r_num, int[] u_num, int strike) {
for (int i = 0; i < r_num.length; i++) {
if (r_num[i] == u_num[i]) {
strike++;
}
}
return strike;
}
private static boolean result(int count, boolean clear) {
boolean over = false;
System.out.println("카운터"+ count);
if (clear) {
System.out.println(count + "회 Game Clear!!");
} else if (count > 3) {
System.out.println("Game Over..");
over = true;
}
return over;
}
}
'Java > java 기초' 카테고리의 다른 글
가변 인수 개념 파악하기 (0) | 2019.11.26 |
---|---|
예외처리 공부 (0) | 2019.11.26 |
오름차순, 내림차순(메소드) (0) | 2019.11.26 |
ASCII 코드를 활용한 암호화 & 복호화 (0) | 2019.11.25 |
String 문자열속 숫자만 포함되었는지 검사 (문자열 검사, 숫자 검사) (0) | 2019.11.25 |