Written by coh at home

[JAVA] 제네릭의 언박싱을 탐구해보자 본문

languages/java

[JAVA] 제네릭의 언박싱을 탐구해보자

och 2024. 8. 4. 01:26

코테 준비를 하면서 문제를 푸는데 계속 에러가 나고 있었다. 나는 로직 분명 개잘짰는데 왜 에러가 날까..?

문제가 된 부분

ArrayList<Integer> v = new ArrayList<>();
for i = 0 ... i = n:
    v.add(1000);

for i = 0... i = n:
    for j = i + 1 ... j = n:
        if (v.get(i) != v.get(j)
            continue;

Integer를 비교하는 부분에서 자동으로 언박싱이 된다고 생각했는데 그게 아니었던 것이어따...
객체끼리의 비교이므로 주소를 비교하는 로직이 된 것이었다... ㅜㅜ
내 1시간 돌려내..

언박싱이 되기 위해서는원시타입과 비교가 되어야 했던 것...!

원시타입 < 제네릭인 경우는 자동으로 제네릭이 언박싱이 된다.

 

그래서 저 문제를 해결하기 위해서는

  1. equals 메서드 이용

-> v.get(i).equals(v.get(j));

  1. intValue() 이용

-> v.get(i).intValue() != v.get(j).intValue()

따라서 두 방법으로 해결하면 된다.

에러가 난 코드

import java.util.*;
public class Main {
    private static ArrayList<Integer> v = new ArrayList<>();
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        int bomb = -1;
        for (int i = 0; i< n; i++){
            v.add(sc.nextInt());
        }
        for (int i = 0; i < n; i++){
            for (int j = i + 1; j < n; j++){
                if (j - i > k)
                    break;
                if (!v.get(i).equals(v.get(j)))  // equals() 메소드 사용
                    continue;
                if (bomb < v.get(i)) // 자동 언박싱
                    bomb = v.get(i);
            }
        }
        System.out.println(bomb);
    }
}

'languages > java' 카테고리의 다른 글

[Stream] mapToInt vs map  (0) 2024.10.07
Collections vs Collectors  (0) 2024.10.05
[JAVA] 함수형 인터페이스와 스트림.  (0) 2024.02.02
[JAVA]상속과 다형성  (1) 2023.10.30
[JAVA]static과 접근제어자.  (0) 2023.10.29