【问题标题】:Can't add objects to priority queue无法将对象添加到优先级队列
【发布时间】:2016-09-20 05:53:55
【问题描述】:

我需要将 Jedi 对象添加到队列中。我知道的所有添加方法都没有工作,并且都给出“找不到符号 - 方法 add(jedi1)。我在上一堂课中对队列了解不多,所以我不确定我在做什么。其他需要注意的是 3 个细节。

1) 修改堆操作以在根中保留最大(而不是最小)元素。有关算法,请参阅堆实验室作业。

2) 使用具有可变大小限制的数组(如果

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

}

【问题讨论】:

  • 你连方法都没有……
  • 您实际上还没有编写 PriorityQueue 实现,这是您应该为您的任务做的。您所拥有的只是一个使用优先级队列的main 方法,并且您在使用泛型时遇到了问题。我们不会为你编写代码,如果你迷路了,你需要和你的教授谈谈。

标签: java queue priority-queue


【解决方案1】:

您的问题是对所有事情都缺乏基本知识;所以我给你一些东西开始:

首先,该错误消息意味着:您的实现该PriorityQueue ...确实add()方法。因为:你没有写!因此,您可以从以下内容开始:

public class PriorityQueue<T> {
  public void add(T newElement) { ...

这导致了第二个主要问题:泛型类型的使用。正如您在我的示例中看到的,您说:“我的队列类,应该接受任何类型的对象”。并且仅在稍后实例化队列对象时;然后你声明这个实例应该是给 Jedis 的,比如:

PriorityQueue<Jedi> jedis = new PriorityQueue<>();
jedies.add(lukeSkywalkerHisUnknownCousin);

当然,这个练习中真正的乐趣在于实现了优先级队列,因此它提供了队列应有的所有方法;并且他们按照你的任务中的描述工作!显然,这是你的任务,所以我把它作为练习留给读者!

最后提示:如果你想了解你应该实现的方法,你可以看看java自己的PriorityQueue和它的方法!

【讨论】:

    【解决方案2】:

    使用下面的方法。

       line.offer(yourObject);
    

    请阅读集合框架的基础知识。您可以从任何集合中添加/修改/删除对象,因为包装类已经为此提供了方法。 例如。当您添加 int (成为 Integer 作为集合仅存储 Object)。使用默认的比较器。如下:

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

    【讨论】:

    • @Cole 你可以在这里使用 Comoparble。您只需要在 Jediq bean 中添加 compareTo 方法即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    相关资源
    最近更新 更多