- 십대 이후로 안 해본 숫자 야구게임을 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가 요구되고 정적 할당이 가능할 때 | 동적 할당이 요구되고 편하게 쓰고 싶을 때 |