Set.copyOf 컴파일 에러 문의드립니다
import java.util.*;
public class Main {
public ArrayList<Integer> solution(int n, int k, int[] a) {
ArrayList<Integer> answer = new ArrayList<>();
HashMap<Integer, Integer> map = new HashMap<>();
int p1 = k;
for(int i = 0; i<k;i++) {
map.put(a[i],map.getOrDefault(a[i], 0) + 1);
}
answer.add(map.size());
while (p1 < n) {
map.put(a[p1],map.getOrDefault(a[p1], 0) + 1);
map.put(a[p1 - k], map.get(a[p1 - k]) - 1);
for(int x : Set.copyOf(map.keySet())) { //값이 0인 key 제거
if (map.get(x) == 0) {
map.remove(x);
}
}
answer.add(map.size());
p1++;
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int[] arr = new int[n];
for (int i=0; i<n;i++) {
arr[i] = sc.nextInt();
}
for (int x : T.solution(n, k, arr)) {
System.out.print(x + " ");
}
}
}
안녕하세요 4-3 매출액의 종류 문제 풀었는데 저는 이런 식으로 했고 remove 하려다가 concurrentmodificationexception 에러가 떠서 map.keySet() 을 복제로 만들기 위해 Set.copyOf를 했는데 이클립스에서는 문제없이 돌아가지만 코딩 채점에서는 컴파일 에러가 뜨더군요.
이거 왜 이러는 걸까요?
답변 2
0
안녕하세요, 인프런 AI 인턴입니다.
범주님, Set.copyOf를 사용한 코드에서 컴파일 에러가 발생하는 이유는 Java 버전의 차이 때문일 가능성이 큽니다. Set.copyOf 메서드는 Java 10부터 추가된 메서드이므로 코딩 채점 시스템이 Java 10 이하의 버전을 사용하고 있다면 해당 메서드를 인식하지 못해 컴파일 에러가 발생할 수 있습니다.
애플리케이션이 사용하는 Java 버전을 확인하고, 만약 버전이 낮다면 다른 방식으로 코드를 작성해야 합니다. 예를 들면 new HashSet<>(map.keySet())을 사용하여 키의 복사본을 만든 후 반복문을 돌면서 수정할 수 있습니다.
아래는 Set.copyOf를 대체할 수 있는 방법입니다:
for(int x : new HashSet<>(map.keySet())) { // 값이 0인 key 제거
if (map.get(x) == 0) {
map.remove(x);
}
}
혹시 시스템 설정에서 Java 버전을 업데이트할 수 있다면 최신 버전을 이용하는 것도 하나의 방법일 수 있습니다. 현재 사용 중인 환경이 Java 10 이상인지 확인해 보시길 바랍니다. 문제가 해결되길 바랍니다!
Java 10과 관련된 정보:
- Set.copyOf는 Java 10에 추가된 메서드입니다.
- 컴파일 에러가 발생한다면 코딩 채점 시스템의 Java 버전을 검토해보세요.
안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.
0
33
1
갑자기 채점 사이트가 바뀌었어요
0
34
1
문제 리스트 페이지
0
29
1
채점 사이트 관련 질문드립니다
0
24
1
봉우리 문제 질문입니다
0
84
2
씨름 선수 문제에서 각 선수의 몸무게나 키가 같을 수도 있다면?
0
65
0
이 코드랑 영상 코드중에 뭐가 더 좋은 코드인가요?
0
72
0
가중치 방향 그래프에서 가중치가 0인 간선을 표현하는 방법
0
67
1
좌표 정렬 문제 이 코드가 왜 틀린지 모르겠습니다 ㅠㅠ
0
85
2
6-7 강의에서
0
48
1
6-6. 장난꾸러기 질문 있습니다.
0
46
1
강의 수강후 코딩테스트
0
111
1
answer 변수 사용 여부
0
46
1
2중 for문
1
85
2
2-11. 임시반장정하기 (Runtime Error)
0
63
1
혹시 LinkedList 같은 자료 구조들은 따로 배우지 않나요?
0
70
1
이런 풀이는 어떨까요
0
44
1
자바 스트림 방식의 효율성 질문 드립니다.
0
57
1
알고리즘 자료 구조들..
0
63
1
StringBuilder vs BufferdWriter
0
48
1
원더랜드(프림)
0
50
1
이런 코드는 어떤가요?
0
61
1
bfs 풀이
0
57
1
병합정렬
0
57
1





