0

メイン クラス内に Prims という名前クラスと、クラス タイプの優先度キューがあります。その構成要素を使用してクラスのインスタンスを作成した後、オブジェクトをキューにプッシュしたいと考えています。コンパイルはうまくいきましたが、実行時間が表示されます。NullPointerExceptionのエラー。コードは次のとおりです。

package mst.prims;

import java.util.*;

    public class Main {

        /**
         * Minimum Spanning Tree - Prim's Algorithm
         * @author Kaidul
         */
        static final int MAX = 100; 

        static class Prims{
            int u, v, cost;
            Prims(int u, int v, int cost){
                this.u = u;
                this.v = v;
                this.cost = cost;
            }
        }

        static PriorityQueue<Prims> q, q1, q2 = new PriorityQueue<Prims>(MAX);

        public static void main(String[] args)  {


            Scanner input = new Scanner(System.in);

            for (int i = 0; i < 7; i++) {
                int u, v, cost;
                u = input.nextInt();
                v = input.nextInt();
                cost = input.nextInt();
                Prims temp = new Prims(u, v, cost);

                q.add(temp);
            }
        }

    }

エラー :

1 2
2 3
Exception in thread "main" java.lang.NullPointerException
    at mst.prims.Main.main(Main.java:36)

私はJavaが初めてで、修正できません。

4

2 に答える 2

4

与えるべきNullPointerExceptionではなく、与えるべきClassCastExceptionです。あなたのクラスはインターフェースをPrims実装していないため、 .ComparablePriority Queue

メソッドを実装Comparableして提供する必要がありますcompareTonested Prims class

また、変数には意味のある名前を使用してください。u私にvは漠然としているように見え、それらが何を表しているかについて何の意味も描写していません.

于 2012-10-25T05:49:29.610 に答える
3

のJavadocからPriorityQueue

自然順序付けに依存するプライオリティ キューも、比較不可能なオブジェクトの挿入を許可しません (これを行うと、ClassCastException が発生する可能性があります)。

Comparableで実装する必要がありますPrims。コレクションで使用する場合は、オブジェクトに適した実装でPrimsオーバーライドする必要がありますequals()hashCode()

于 2012-10-25T05:50:25.140 に答える