먼저 내가 구현한 숫자야구게임 코드
if와 for 문으로 만 구현해서 그런지 코드가 지저분하다..
코드리뷰를 하면서 피드백 받은 사항
package baseball;
import java.lang.reflect.GenericArrayType;
import java.util.Scanner;
//세자리 랜덤숫자 구하기 구현(중복 x)
// 볼 스트라이크 표현 구현
// 게임종료하는 부분 구현
public class RandomNumber {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int[] number = new int[3];
int[] user = new int[3];
int Try = 0;
int strike = 0;
int ball = 0;
System.out.println("컴퓨터가 숫자를 생성하였습니다. 답을 맞춰보세요!");
//랜덤숫자 세자리 뽑기
for (int i = 0; i < 3; i++) {
number[i] = (int)(Math.random()*10);
// System.out.print(number[i]);
//중복제거
for (int j = 0; j < i; j++) {
if (number[i] == number[j]) {
i--;
break;
}
}
}
//유저입력값
for (int x = 0; x < 10; x++) {
Try ++;
// for (int i = 0; i < 3; i++) {
//// user[i] = scan.nextInt();
// user[x] = Integer.parseInt(scan.nextLine());
//// temp = user[i];
// if(user.length != 3 ){
// System.out.println("3자리 숫자를 입력해주세요.");
// }
//// System.out.println("유저가 입력한 값 : " + user[j] );
// }
System.out.println(Try+ " 번 째 시도 : ");
String userInput = scan.nextLine();
if (userInput.length() != 3) {
System.out.println("3자리 숫자를 입력해주세요.");
// continue;
}
user[0] = Character.getNumericValue(userInput.charAt(0)); // Character.getNumericValue 는 char 타입의 숫자를 정수값으로 변환
user[1] = Character.getNumericValue(userInput.charAt(1));
user[2] = Character.getNumericValue(userInput.charAt(2));
//볼, 스트라이크 구별
for (int j = 0; j < 3; j++) {
for (int k = 0; k < 3; k++) {
// System.out.println("스트라이크");
if (number[j] == user[k]) {
if (j == k) {
strike ++;
// System.out.println("스트라이크");
} else {
ball ++;
// System.out.println("볼");
}
}
}
}
if (strike == 0 && ball == 0) {
System.out.println("0B0S");
} else if (strike == 1 && ball == 0) {
System.out.println("0B1S");
} else if (strike == 2 && ball == 0) {
System.out.println("0B2S");
} else if (strike == 1 && ball == 1) {
System.out.println("1B1S");
} else if (strike == 1 && ball == 2) {
System.out.println("2B1S");
} else if (strike == 1 && ball == 3) {
System.out.println("3B1S");
} else if (strike == 1 && ball == 4) {
System.out.println("4B1S");
} else if (strike == 0 && ball == 1) {
System.out.println("1B0S");
} else if (strike == 0 && ball == 2) {
System.out.println("2B0S");
} else if (strike == 0 && ball == 3) {
System.out.println("3B0S");
} else if (strike == 0 && ball == 4) {
System.out.println("4B0S");
} else {
System.out.println("3S");
System.out.println( Try + "번 만에 맞히셨습니다.");
System.out.println("게임을 종료합니다.");
break;
}
}
}
}
아래코드는 구글링을 통해 배운 코드다
user는 user가 입력하는 값
배열로 3자리로 고정해 scanner로 받은
charAt() 메서드를 사용해서 userinput 문자열에서 특정 위치에 있는 문자를 가져온다.
-- Character.getNumericValue() 메서드를 사용하면 문자를 정수값으로 변환한다
또한 숫자가 아닌 문자인 경우에는 -1을 반환
user[0] = Character.getNumericValue(userInput.charAt(0)); // Character.getNumericValue 는 char 타입의 숫자를 정수값으로 변환
user[1] = Character.getNumericValue(userInput.charAt(1));
user[2] = Character.getNumericValue(userInput.charAt(2));
코드를 짜고 알았지만 컬렉션의 set / list 를 써서 더 깔끔하게 구현하면 좋을 것같다.
나중에 꼭 한번 컬렉션을 사용해서 짜봐야 겠다. 내가봐도 너무 지저분하다...
그리고 매니저님께서는 if else if 보다는 if 로 나누는것이 시각적으로도 나중에 코드를 수정할 때도 더 편의성이 높다고 하셨다. 참고해서 다음에는 반영해서 짜봐야겠다.
'TIL' 카테고리의 다른 글
+7 자바 Calendar 클래스 (0) | 2023.06.17 |
---|---|
+6 예외처리 컴파일에러 / 런타임에러 / 예외클래스 (0) | 2023.06.17 |
+4 자바 컬렉션 set list map (0) | 2023.06.15 |
day +3 //Github 깃헙 fork clone branch pull push (0) | 2023.06.13 |
항해 day +2 HTTP GET방식 POST방식 (1) | 2023.06.09 |