对于我的数据结构类,我正在尝试编写一个模拟洗车的程序,并且我想让花式汽车比使用优先级队列的常规汽车更高优先级。我遇到的问题与Java有关,无法将“Object”类型转换为“ArrayQueue”(简单的FIFO实现)。我做错了什么,我该如何解决?
public class PriorityQueue<E>
{
private ArrayQueue<E>[] queues;
private int highest=0;
private int manyItems=0;
public PriorityQueue(int h)
{
highest=h;
queues = (ArrayQueue<E>[]) new Object[highest+1]; <----problem is here
}
public void add(E item, int priority)
{
queues[priority].add(item);
manyItems++;
}
public boolean isEmpty( )
{
return (manyItems == 0);
}
public E remove()
{
E answer=null;
int counter=0;
do
{
if(!queues[highest-counter].isEmpty())
{
answer = queues[highest-counter].remove();
counter=highest+1;
}
else
counter++;
}while(highest-counter>=0);
return answer;
}
}
修改
谢谢你们对这个问题的快速回答。我按照你的建议和另外一段代码解决了这个问题:
public PriorityQueue(int h)
{
highest=h;
queues = new ArrayQueue[highest+1];
for(int i = 0; i <= highest; i++)
{
queues[i] = new ArrayQueue();
}
}
答案 0 :(得分:4)
对象是一个对象,并且(在大多数情况下)不是ArrayQueue。所以演员阵容确实不可能。
创建通用数组也是一个问题,但在你的情况下,这应该有效:
public PriorityQueue(int h)
{
highest=h;
queues = new ArrayQueue[highest+1]; // Gives an ignorable warning
}
修改强>
教科书中解释的方式不正确,本书需要一个新的修订周期;)Java中不允许使用建议的强制转换,这就像尝试一样
String forEverUseless = (String) new Object(); // this will not give an empty String
// but an ouch-that-hurts-Exception
哪个更明显。您可以从不将类强制转换为其子类型(派生类)之一。这适用于所有类,包括数组和泛型类。
编辑2
还有两个建议:
queue.add(entry, -1)
)答案 1 :(得分:1)
问题几乎就是你所说的 - 你正在制作类型为Object[]
的东西,并尝试将其转换为ArrayQueue[]
,而这些不是兼容的类型。你应该这样做:
queues = new ArrayQueue[highest+1];