当前位置: 首页 > 知识库问答 >
问题:

优先级队列不能应用于给定类型

锺离飞尘
2023-03-14

我是新来的工作与优先级队列和格式化此代码错误,我想让我的优先级是一个城市的直线距离,但我不相信我传递了这个信息正确的队列。查看API,我需要将SLD设置为比较器

[CNNVD]Public PriorityQueue PriorityQueue多个元素的排序问题(CNNVD-200605-045)Public PriorityQueue(int初始容量,比较器比较器)

创建具有指定初始容量的PriorityQueue,该容量根据指定的比较器对其元素进行排序。

但我不清楚。

public static void GreedySearchMap(map Romania) {
    boolean done = false;

    city current;

    int numsteps = 10;
    int cursteps;
    int choice;
    int numconnections;
    int totaldist;

    cursteps = 0;
    current = Romania.Arad;
    totaldist = 0;

    /*create queue*/
    PriorityQueue<city> q = new PriorityQueue<city>(city city,int SLD);         
    q.offer(current);
    current.visited = true;

    while (!done) {
        System.out.printf("Step %d, In %s, Distance\t%d\n", cursteps,
                current.getname(), totaldist);

        if (current.getname() == "Bucharest")
            done = true;
        else {

            current = q.poll();
            cursteps++;
            numconnections = current.getconnections();

            for (int i = 0; i < numconnections; i++) {
                choice = i;
                if (current.getcity(choice).visited == false) {
                    //totaldist += current.getdist(choice);
                    q.offer(current.getcity(choice), current.getSLD());
                    current.visited = true;
                }
            }
        }
    }

    System.out.printf("-----------------------\n");
}

我的错误是:

P:\csci395\hw4>javac GS.java
GS.java:85: error: method offer in class PriorityQueue<E> cannot be applied to g
iven types;
                                                            q.offer(current.
getcity(choice), current.getSLD());
                                                             ^
  required: city
  found: city,int
  reason: actual and formal argument lists differ in length
  where E is a type-variable:
    E extends Object declared in class PriorityQueue
 1 error

共有2个答案

双浩涆
2023-03-14

首先,给类起一个大写的名字“城市”可能会生成编译器错误。其次,您的错误消息会告诉您出了什么问题。

你应该给你的PriorityQueue一个比较器。int甚至不是一个类对象,它是一种基本类型。查找Java比较器(java.lang.比较器)了解更多信息。

丁业
2023-03-14

SLD不是比较器,它只是被比较的东西。您需要创建一个进行实际比较的类,并提交:

new Comparator<city>() {
    @Override
    public int compare(city city1, city city2) {
        return city1.getSLD() - city2.getSLD();
    }
};

阅读java。util。比较仪,以获得更多的了解。

  • 编辑-

不过,这只是一个错误。编译过程中出现的错误(如编译器输出中所述)是由于PriorityQueue的offer()方法使用了错误的参数。只应传递一个city:SLD将由比较器实例的代码处理。

 类似资料:
  • 考虑下面的优先级类声明<代码>类优先级队列 我的想法: 我能想到的一件事是,这将强制优先级队列使用对象比较器,并且不会提供实现其自定义比较器的能力,因为类的用户可能希望基于某个不同的比较器构建队列。

  • 注意:我知道可以用比较器创建优先级队列,然后重复调用Add。

  • 优先级队列(Priority Queue) 注:队列是一种特征为FIFO的数据结构,每次从队列中取出的是最早加入队列中的元素。但是,许多应用需要另一种队列,每次从队列中取出的应是具有最高优先权的元素,这种队列就是优先级队列(Priority Queue),也称为优先权队列。 1. 优先级队列的概念 1.1 优先级队列的定义 优先级队列是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优

  • 我需要一个优先级队列,它首先获得具有最高优先级值的项目。我当前正在使用队列库中的PriorityQueue类。但是,这个函数只先返回值最小的项。我尝试了一些很难看的解决方案,比如(sys.maxint-priority)作为优先级,但我只是想知道是否存在更优雅的解决方案。

  • 我在模拟中使用下面的代码。因为我一遍又一遍地调用dijkstra方法,性能对我来说非常关键。,我使用PriorityQueue将图的节点保持相对于它们到源的距离的升序。PriorityQueue为我提供了以O(log n)复杂度访问距离最小的节点。但是,要在重新计算节点距离后保持节点有序,我需要首先删除节点,而不是再次添加它。我想可能有更好的方法。我感谢任何反馈。提前感谢所有社区。

  • 我正在编写一个最小优先级队列和一个最大优先级队列,如下所示: 输入数组的数字将一个接一个地添加到队列中。然而,当数组[12,4,5,3,8,7]是一个样本输入,打印优先队列的输出是: MIN:[3.0, 4.0, 5.0, 12.0, 8.0, 7.0]MAX:[12.0, 8.0, 7.0, 3.0, 4.0, 5.0] 我定义的比较器有什么问题吗?提前感谢你的帮助。