无法强制转换到类是装载机的未命名模块

n6lpvg4x  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(250)

我正在尝试使用链表实现从头开始创建优先级队列adt。在优先级队列中,我需要插入作业,作业必须按优先级顺序执行。我构建的优先级adt来自我的java书籍,而我的job类是由我创建的。我可以将所有作业插入优先级队列,但当我尝试removemin()时,我得到一个cannot cast类。。。错误。
这是我获取数组、将它们放入队列并移除它们的方法。

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());
    }
}

问题出现在my:job currentjob=(job)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();}

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

svmlkihl

svmlkihl1#

removeMin 返回一个 Entry<K,V> ,不是 Job . 它不能投给 Job . 实施 Entry 不见了,但我想它有一个 value() 或者 getValue() 方法:

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

相关问题