1. Collections.shuffle(list)와 Math.random() 서칭 필요
문제:
무작위 숫자 생성을 위해 Collections.shuffle(list)와 Math.random()에 대한 이해가 필요했다.
해결 :
- Collections.shuffle(list)
- 리스트 안에 있는 요소들의 순서를 무작위로 섞어주는 자바 내장 메서드
List<Integer> list = new ArrayList<>();
for (int i = 1; i <= 9; i++) {
list.add(i);
}
Collections.shuffle(list);
- Math.random()
- 무작위 실수를 생성하는 메서드로, 0.0 이상 1.0 미만의 값을 반환
int randomNumber = (int) (Math.random() * 9) + 1; // 1부터 9까지의 랜덤 숫자 생성
2.유효성 검사
문제:
입력된 숫자가 규칙에 맞지 않으면 게임이 정상적으로 진행되지 않음. 올바른 유효성 검사가 필요.
체크 영역이 많아서 고민을 많이 했던 부분.
해결 :
유효성 검사는 사용자가 입력한 숫자가 다음 조건을 만족하는지 확인
- 3자리의 숫자인가?
- 중복된 숫자가 없는가?
- 1부터 9 사이의 숫자인가?
public static boolean isValid(String input) {
// 3자리 수인지 확인
if (input.length() != 3) {
return false;
}
// 숫자로만 구성되어 있는지 확인
if (!input.matches("[1-9]+")) {
return false;
}
// 중복된 숫자가 없는지 확인
char[] chars = input.toCharArray();
if (chars[0] == chars[1] || chars[1] == chars[2] || chars[0] == chars[2]) {
return false;
}
return true;
}
3. 결과값 출력 문구
문제:
단순히 스트라이크 볼 아웃으로 삼단구성을 하려 했었음. x
해결:
if 문을 활용해야 함.
if (strike == 3) {
System.out.println("3스트라이크! 정답입니다!");
return "정답을 맞추셨습니다! 시도 횟수: " + attempts + "번"; // 게임 기록 반환
} else if (strike > 0 || ball > 0) {
System.out.println(strike + " 스트라이크, " + ball + " 볼");
} else {
System.out.println("아웃");
}
5. while 문을 이용한 프로그램 안내 문구 출력
문제:
규칙에 대한 잘못된 이해로 인해서 while문을 쓴다는 생각을 하지 못했었음.
실제 야구 느낌으로 3아웃이면 공수교대 느낌이라 생각했었음.
해결:
( 시작 문구 part)
출력문구를 while 문을 통해 루프시킴.
환영합니다. 1. 게임 시작 2. 기록. 3 종료
while 문 안에 switch 문을 넣었음.
(게임 시작 및 정답 확인 메서드 part)
while (true)를 통해서 조건이 항상 참이길 바라며 ....
만약 isValid(input) 메서드를 사용해 입력된 값이 올바른지 확인.
만약 유효하지 않다면, **"잘못된 입력입니다"**라는 메시지를 출력하고 continue를 사용하여 다음 반복으로 넘어감.
결과값 출력part 도 여기 while문에 넣었음.
6. 클래스를 분화시키는 것
문제 :
어떤식으로 이름을 정해야 할지, oop는 어떤식으로 적용해야 할지 총체적 난국이였다.
해결:
책임별로 클래스를 분리하고,
GameRecord
Game
Inputvaildator
main2
로 클래스를 분화하였다.
public class GameRecord {
private List<String> records;
...
public List<String> getRecords() {
return records;
public class Game {
//정답 숫자와 시도 횟수 캡슐화
private List<Integer> answer;
private int attempts;
...
..
.
// answer와 attempts에 접근할 수 있게 캡슐화
public List<Integer> getAnswer() {
return answer;
}
public int getAttempts() {
return attempts;
}
이상 lv2 까지 베이스볼 게임을 실행하면서 생긴 문제점과 구글링을 통해 알아본 것 들이였다.