0

私はプライオリティ キューの操作に不慣れで、このコードのフォーマットが間違っています。プライオリティを都市までの直線距離にしたいのですが、この情報をキューに正しく渡したとは信じていません。APIを見ると、SLDをコンパレータとして設定する必要があります

public PriorityQueue(int initialCapacity, Comparator comparison)

指定されたコンパレータに従って要素を順序付けする、指定された初期容量を持つ 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 を読んでください。

  • 編集 -

ただし、これは 1 つのエラーにすぎません。コンパイラからの出力で説明されているように、コンパイルで発生するエラーは、PriorityQueue の offer() メソッドに間違った引数を使用していることが原因です。a のみをcity渡す必要があります。SLD は Comparator インスタンスのコードによって処理されます。

于 2013-04-15T19:21:53.230 に答える
0

まず、クラスに大文字の名前を付けます。'city city' はコンパイラ エラーを生成する可能性があります。第二に、エラーメッセージは何が間違っているかを教えてくれます。

Comparator を PriorityQueue に与える必要があります。int はクラス オブジェクトではなく、プリミティブ型です。詳細については、Java コンパレーター (java.lang.Comparator) を参照してください。

于 2013-04-15T19:23:42.270 に答える