【发布时间】:2018-04-14 13:38:20
【问题描述】:
我收到给定代码的以下错误。
我无法纠正错误是什么?
行内:“Long 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);
}
}
}
线程“main”java.lang.ClassCastException 中的异常:java.lang.Integer 无法转换为 java.lang.Long
【问题讨论】:
-
是否要移除优先级队列的顶部,然后将(移除的)顶部存储到变量
pw1中?请说清楚你想要什么。 -
是的,我想删除优先队列的顶部,然后存储它。
标签: java casting priority-queue