0

我是使用优先级队列的新手,并且此代码的​​格式错误,我希望我的优先级是到城市的直线距离,但我不相信我正确地将这些信息传递给队列。查看 API 我需要将 SLD 设置为比较器

public PriorityQueue(int initialCapacity, Comparator compare)

创建一个具有指定初始容量的 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
4

2 回答 2

0

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

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

阅读 java.util.Comparator 以了解更多信息。

  • 编辑 -

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

于 2013-04-15T19:21:53.230 回答
0

首先,给类一个大写的名字。'city city' 可能会产生编译器错误。其次,您的错误消息告诉您出了什么问题。

你应该给你的 PriorityQueue 一个 Comparator。int 甚至不是类对象,它是原始类型。查找 Java 比较器 (java.lang.Comparator) 以获取更多信息。

于 2013-04-15T19:23:42.270 回答