我需要将Jedi对象添加到队列中。我所知道的添加方法都没有工作,并且都给出了“找不到符号 - 方法添加(jedi1)。”我在上一堂课中没有太多关于队列的知识,所以我不确定我在做什么。其他需要注意的事项有3个具体内容。
1)修改堆操作以保持根中的最大值 - 而不是最小值 - 元素。请参阅算法的堆实验室分配。
2)使用具有不同大小限制的数组(如果< 10%利用率减少一半;如果已满,则减小一倍)。
3)使用类似的方法实现堆以接收任何通用对象。
4)使用以下规则允许重复值:如果输入重复值,则应将具有相似值的新元素视为优先级低于现有元素。
public class PriorityQueue<JediQ>
{
Scanner reader = new Scanner(System.in);
public void main(String[] args)
{
while (true)
{
System.out.println("Please select an option");
System.out.println("1 - Add a Jedi ");
System.out.println("2 - Remove an element");
System.out.println("3 - Print head value");
System.out.println("4 - Compare value to head value");
System.out.println("5 - Print Array");
System.out.println("6 - Exit");
int x = 0;
x = reader.nextInt();
if (x == 1)
{
PriorityQueue<JediQ> line = new PriorityQueue<JediQ>();
System.out.println("Enter the name of the Jedi");
String Name = reader.next();
System.out.println("Enter the midi count");
double midi = reader.nextInt();
Jedi jedi1 = new Jedi(Name, midi);
line.add(jedi1);
System.out.print("Jedi was added");
}
if (x == 6)
{
System.exit(0);
}
}
}
}
答案 0 :(得分:2)
你的问题是缺乏对所有事情的基本知识;所以我给你一些开始的东西:
首先,该错误消息表示:您的实施PriorityQueue
... 不具有add()
方法。因为:你没写它!所以你从以下内容开始:
public class PriorityQueue<T> {
public void add(T newElement) { ...
这导致了第二个主要问题:泛型类型的使用。正如您在我的示例中所看到的,您说:“我的队列类,应该接受任何类型的对象”。并且仅在稍后,实例化队列对象时;然后你声明这个实例应该是Jedis,比如:
PriorityQueue<Jedi> jedis = new PriorityQueue<>();
jedies.add(lukeSkywalkerHisUnknownCousin);
但是,当然,本练习中的真正的乐趣是优先级队列的实现,因此它提供了队列应具有的所有方法;并且他们按照您的任务中的规定工作!显然,这是你的任务,所以我将其作为练习留给读者!
最后提示:如果你想了解你应该实现的方法,你可以看一下java自己的PriorityQueue及其方法!
答案 1 :(得分:-1)
使用以下方法。
line.offer(yourObject);
请阅读馆藏框架的基础知识。您可以从任何集合中添加/修改/删除对象,因为包装类已为此提供了方法。 例如。当你添加int(它变为Integer,因为集合只存储Object)。使用默认的Comparator。如下:
public class PriorityQueueExample
{
public static void main(String[] args)
{
//Creating a PriorityQueue with default Comparator.
PriorityQueue<Integer> pQueue = new PriorityQueue<Integer>();
//Inserting elements into pQueue.
pQueue.offer(21);
pQueue.offer(17);
//Removing the head elements
System.out.println(pQueue.poll());
要在任何集合中添加自定义对象,您需要使用Comparator或Comparable。
class JediQ
{
String name;
int midi;
//Constructor Of JediQ
public JediQ(String name, int midi)
{
this.name = name;
this.midi = midi;
}
@Override
public String toString()
{
return name+" : "+midi;
}
}
and then adding the object as below:
class MyComparator implements Comparator<JediQ>
{
@Override
public int compare(JediQ e1, JediQ e2)
{
return e1.name - e2.name;
}
}
MyComparator comparator = new MyComparator();
PriorityQueue<JediQ> pQueue = new PriorityQueue<JediQ>(7, comparator);
pQueue.offer(new JediQ("AAA", 150));