
问个java中有关优先队列的问题,求高手!
代码太长,截出问题的一段问一下:publicTree(char[]alist,int[]blist)throwsException{PriorityQueuepq=new...
代码太长,截出问题的一段问一下:
public Tree(char[] alist, int[] blist) throws Exception {
PriorityQueue pq=new PriorityQueue();
for(int n=1;n<=26;n++){
pq.offer(new PriorityQData(alist[i],blist[i]));
}
char min1=pq.poll();
最后问题出在上面的最后一句上,我想把pq队列的首元素提出,并把其data值赋给min1这个char型变量,但是最后问题为“不兼容的类型”,我min1的类型是char,pq.poll()取出的值是alist中的,也是char型,为什么类型不兼容? 展开
public Tree(char[] alist, int[] blist) throws Exception {
PriorityQueue pq=new PriorityQueue();
for(int n=1;n<=26;n++){
pq.offer(new PriorityQData(alist[i],blist[i]));
}
char min1=pq.poll();
最后问题出在上面的最后一句上,我想把pq队列的首元素提出,并把其data值赋给min1这个char型变量,但是最后问题为“不兼容的类型”,我min1的类型是char,pq.poll()取出的值是alist中的,也是char型,为什么类型不兼容? 展开
1个回答
展开全部
pq.offer(new PriorityQData(alist[i],blist[i]));这个是向优先队列中的插入语句
你插入的是PriorityQData数据类型,这个应该是你自己定义的数据类型吧
那么pq.poll()返回的也应该是PriorityQData,而不是char,所以会出现:不兼容的类型
你插入的是PriorityQData数据类型,这个应该是你自己定义的数据类型吧
那么pq.poll()返回的也应该是PriorityQData,而不是char,所以会出现:不兼容的类型
追问
是的,PriorityQData是优先队列中每个结点的类,里面有两个变量,PriorityQData(elem,priority),一个是这个结点存放的值,一个是它的优先级
那请问要怎么改才能让这个解决这个错误?
追答
PriorityQData pData = pq.poll();
char min1 = pData.getElem();
不知道你的这段代码究竟想要实现的功能是什么,我只能猜一下:
将字符数组alist中的字符按照blist中指定的优先级放入优先队列中,每次取出优先级最大或最小的字符。
PriorityQueue 的优先级是不需要指定的,或者说它指定的方式是通过设置比较器Comparator来实现的,如果没有指定则使用默认的自然顺序,如果加入的元素是int型,直接比较大小,最小的放在最前面,如果是对象,并且该对象没有比较器,则使用对象地址的大小
所以你的这段代码很可能达不到预想的功能
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询