본문 바로가기
카테고리 없음

야구게임 by Java

by 수수남매 2023. 10. 19.
  • 십대 이후로 안 해본 숫자 야구게임을 Java로 만들어 봄

  • 랜덤 넘버 3개를 만드는 방법이야 쉽겠지 했는데 중복을 허용하지 않아야 하는군...
    - int[]로 만들면 되나?
    - 아니면 Set.add로 length가 3이 될때까지?
    - Strike/Ball 판정하려면 index가 필요하니까 LinkedHashSet인가?
    - 그냥 ArrayList는?
    - HashSet으로 만들어서 List로 형변환? (상속관계가 아닌듯..)
    Random random = new Random();
    int num1 = random.nextInt(10);
    int num2, num3;
    while (true) {
        num2 = random.nextInt(10);
        num3 = random.nextInt(10);
        if (num1 == num2 || num2 == num3 || num3 == num1) { //하.. 구리다
            continue;
        }
        break;
    }
    // int[]로 생성
    int[] outNum = {num1, num2, num3};
    
    // ArrayList로 생성
    ArrayList<Integer> outNum = new ArrayList<>();
    outNum.add(num1);
    outNum.add(num2);
    outNum.add(num3);
     
  • 3자리 숫자 두 개를 순서까지 고려해서 비교하려면 뭐가 더 좋을까...
    - int[]는 단순해 보이지만 이중 for문을 써야 될 듯
    - ArrayList는 contains()와 indexOf()를 쓰면 for문 한 번만 돌리면 되고 가독성이 좋을 듯
    // int[] 숫자 비교
    for (int i = 0; i < trial.length; i++) {
        for (int j = 0; j < outNum.length; j++) {
            if (trial[i] == outNum[j]) {
                if (i == j) {
                    strike++;
                } else {
                    ball++;
                }
            }
        }
    }
    
    // ArrayList 숫자 비교
    for (int c : trial) {
        if (outNum.contains(c)) {
            if (trial.indexOf(c) == outNum.indexOf(c)) {
                strike++;
            } else {
                ball++;
            }
        }
    }​
  • Array와 ArrayList의 차이
  Array ArrayList
Size 초기화시 정적 할당
int[] array = new int[n];
초기화시 동적 할당
ArrayList<T> arrayList = new ArrayList<> ();
Type 초기화시 정의된 type만 할당 가능 기본적으로 reference type 할당 가능
-> primitive type은 Wrapper type으로 적용
Performance 메모리 재할당이 없으므로 좋음 상대적으로 낮음
Syntax bracket 사용
array[index]
add, get, set 등 다양한 메서드 사용
arrayList.add(value), .get(index) ~
결론 Performance가 요구되고 정적 할당이 가능할 때 동적 할당이 요구되고 편하게 쓰고 싶을 때