Written by coh at home
[JAVA] 제네릭의 언박싱을 탐구해보자 본문
코테 준비를 하면서 문제를 푸는데 계속 에러가 나고 있었다. 나는 로직 분명 개잘짰는데 왜 에러가 날까..?
문제가 된 부분
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시간 돌려내..
언박싱이 되기 위해서는원시타입과 비교가 되어야 했던 것...!
원시타입 < 제네릭인 경우는 자동으로 제네릭이 언박싱이 된다.
그래서 저 문제를 해결하기 위해서는
- equals 메서드 이용
-> v.get(i).equals(v.get(j));
- 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 |