当前位置: 首页 > 知识库问答 >
问题:

无法对类进行强制转换。是装载机的未命名模块

丁经国
2023-03-14

我正在尝试使用链表实现从头创建优先级队列ADT。在优先级队列中,我需要插入作业,作业必须按优先级顺序执行。我构建的优先级ADT来自我的Java书籍,我的作业类是由我创建的。我可以将所有作业插入优先级队列,但当我尝试移除min()时,我得到一个无法强制转换的类。。。错误

这是我获取数组的方法,将它们放入队列并删除它们。

public static void executeJobs(Job[] jobInputArray) {

    SortedPriorityQueue pq = new SortedPriorityQueue();
    
    for(int j = 0; j < jobInputArray.length; j++) {
        pq.insert(jobInputArray[j].getFinalPriority(), jobInputArray[j]);
        jobInputArray[j].setEntryTime(j+1);
    }
    
    int cycles = 0;
    
    while(!pq.isEmpty()) {
        Job currentJob = (Job) pq.removeMin();
        System.out.println(currentJob.getJobName());
    }
}

问题出现在我的:作业当前作业=(作业)pq.removeMin();行。

这是我的SortedPriorityQueue类:

public static class SortedPriorityQueue<K,V> extends AbstractPriorityQueue<K,V>{
private PositionalList<Entry<K,V>> list = new LinkedPositionalList<>();

public SortedPriorityQueue() { super(); }
public SortedPriorityQueue(Comparator<K> comp) {super(comp);}

public Entry<K,V> insert(K key, V value) throws IllegalArgumentException{
    checkKey(key);
    Entry<K,V> newest = new PQEntry<>(key,value);
    Position<Entry<K,V>> walk = list.last();
    
    while(walk != null && compare(newest, walk.getElement()) < 0)
        walk = list.before(walk);
    if(walk == null)
        list.addFirst(newest);
    else
        list.addAfter(walk, newest);
    return newest;
}
public Entry<K,V> min(){
    if (list.isEmpty()) return null;
    return list.first().getElement();
}

public Entry<K,V> removeMin(){
    if(list.isEmpty()) return null;
    return list.remove(list.first());
}
public int size() {return list.size();}

}

非常感谢您的帮助。。提前谢谢!

共有1个答案

易宣
2023-03-14

removeMin返回一个条目

Job currentJob = (Job) pq.removeMin().getValue();

 类似资料: