Java 无法对类进行强制转换。是装载机的未命名模块
我正在尝试使用链表实现从头创建优先级队列ADT。在优先级队列中,我需要插入作业,作业必须按优先级顺序执行。我构建的优先级ADT来自我的Java书籍,我的作业类是由我创建的。我可以将所有作业插入优先级队列,但当我尝试移除min()时,我得到一个无法强制转换的类。。。错误 这是我获取数组、将它们放入队列并删除它们的方法Java 无法对类进行强制转换。是装载机的未命名模块,java,Java,我正在尝试使用链表实现从头创建优先级队列ADT。在优先级队列中,我需要插入作业,作业必须按优先级顺序执行。我构建的优先级ADT来自我的Java书籍,我的作业类是由我创建的。我可以将所有作业插入优先级队列,但当我尝试移除min()时,我得到一个无法强制转换的类。。。错误 这是我获取数组、将它们放入队列并删除它们的方法 public static void executeJobs(Job[] jobInputArray) { SortedPriorityQueue pq = new Sor
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());
}
}
公共静态void executeJobs(作业[]作业输入阵列){
SortedPriorityQueue pq=新的SortedPriorityQueue();
对于(int j=0;j
问题出现在我的作业上: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();}
公共静态类SortedPriorityQueue扩展了AbstractPriorityQueue{
私有位置列表=新的LinkedPositionList();
公共排序优先级队列(){super();}
公共排序优先级队列(比较器comp){super(comp);}
公共条目插入(K键,V值)引发IllegalArgumentException{
检查键(key);
条目最新=新条目(键、值);
Position walk=list.last();
while(walk!=null&&compare(最新,walk.getElement())<0)
步行=列表。之前(步行);
if(walk==null)
列表。addFirst(最新);
其他的
list.addAfter(walk,最新);
返回最新版本;
}
公开进入(分钟){
if(list.isEmpty())返回null;
返回list.first().getElement();
}
公共条目removeMin(){
if(list.isEmpty())返回null;
return list.remove(list.first());
}
public int size(){return list.size();}
}
非常感谢您的帮助。。提前谢谢
removeMin
返回一个条目
,而不是作业
。它不能转换为作业
。Entry
的实现缺失,但我假设它有一个value()
或getValue()
方法:
Job currentJob = (Job) pq.removeMin().getValue();
请在问题中添加准确的错误消息。线程“main”java.lang.ClassCastException中的异常:类helloworld.helpers$AbstractPriorityQueue$PQEntry不能强制转换为类helloworld.Job(helloworld.helpers$AbstractPriorityQueue$PQEntry和helloworld.Job在加载程序的未命名模块中)removeMin返回什么类型?在你的情况下,K和V的实例化是为了什么?天哪,我太蠢了。。。我真的整天都在玩这个。我不知道为什么它没有点击me@FalseOccasion如果使用
新建SortedPriorityQueue()
实例化队列,则根本不需要强制转换getValue()
将已返回正确的类型。如果可以避免,就不要使用原始类型。明白了!问一个简单的问题,但是有没有一种方法可以迭代优先级队列,我使用一个扩展的for循环来搜索一个值?@FalseCase:让您的类实现