我收到给定代码的以下错误。
我无法纠正错误是什么?
在行中:"长pw1 = pq1.remove();"
int n = in.ni();
long a[] = in.gla(n);
PriorityQueue<Long> pq = new PriorityQueue<>();
Map<Long, PriorityQueue> map = new HashMap<>();
Set<Long> s = new HashSet<>();
for (int i = 0; i < n; i++) {
if (s.contains(a[i])) {
map.get(a[i]).add(i);
} else {
pq.add(a[i]);
s.add(a[i]);
map.put(a[i], new PriorityQueue<>());
map.get(a[i]).add(i);
}
}
while(!pq.isEmpty()){
System.out.println(pq.remove());
}
while(!pq.isEmpty()){
long p = pq.remove();
System.out.println(p);
PriorityQueue<Long> pq1 = map.get(p);
while(pq1.size()>1){
Long pw1 = pq1.remove();
Long pw = pq1.remove();
System.out.println(pw);
if(s.contains(2*p)){
map.get(2*p).add(1);
}
else{
s.add(2*p);
pq.add(2*p);
map.put(p*2, new PriorityQueue<Long>());
map.get(2*p).add(1);
}
}
}
线程中的异常&#34; main&#34; java.lang.ClassCastException:java.lang.Integer无法强制转换为java.lang.Long
答案 0 :(得分:0)
map
值的去除是raw type PriorityQueue
(而不是参数化类型 PriorityQueue<Long>
)。通过更改
Map<Long, PriorityQueue> map = new HashMap<>();
为:
Map<Long, PriorityQueue<Long>> map = new HashMap<>();