1

TreeSet にオブジェクトを追加しようとすると、この例外がポップアップします。

Exception in thread "main" java.lang.NullPointerException
    at Circle.compareTo(Shape.java:47)
    at Circle.compareTo(Shape.java:23)
    at java.util.TreeMap.compare(Unknown Source)
    at java.util.TreeMap.put(Unknown Source)
    at java.util.TreeSet.add(Unknown Source)
    at CircleTreeSet.main(CircleTreeSet.java:24)

メイン メソッドで行っていることは、TreeSet を作成し、オブジェクトを作成して、それをセットに追加することだけです。

主な方法は次のとおりです。

class CircleTreeSet {
    public static void main(String[] args) {
        TreeSet<Circle> cs = new TreeSet<Circle>();

        Circle circle1 = new Circle("circle1", 1);

        cs.add(circle1);
    }
}

クラスは次のとおりです。

class Circle extends Shape implements Comparable<Circle> {
    private static String name;
    private int radius;

    Circle(String n, int r) {
        super(n);
        radius = r;
    }

    public double area() {
        return Math.PI * radius * radius;
    }

    public double perim() {
        return 2 * Math.PI * radius;
    }

    public int compareTo(Circle c) {
        return name.compareTo(c.name);
    }
}
4

4 に答える 4

2

name静的であり、設定されていないため null です。の意味を誤解していると思いますstatic

于 2013-08-11T18:55:10.260 に答える
0

おそらくそうnameであってはならず、コンストラクターでそれに値を割り当てる必要があります。CirclestaticCircle

class Circle extends Shape implements Comparable<Circle> {
    private String name;
    private int radius;

    Circle(String n, int r) {
        this.name = n; // this is crucial
        this.radius = r;
    }

    public int compareTo(Circle other) {
        return name.compareTo(other.getName());
    }

    public String getName() {
        return name;
    }
}
于 2013-08-11T18:56:36.507 に答える
0

静的変数nameを初期化しないため、NullPointerException が発生します。その結果、メソッドcompareTo(...)を呼び出すと、コードが

return name.compareTo(c.name);

が実行されたとき、name の値は null です。この null 値の変数を介してメソッド (比較対象 (...) )を呼び出そうとしているため、NullPointerException がスローされます。

さらに、名前を静的に設定すると、オブジェクトを作成するたびにその値が上書きされる可能性があります。静的変数は、その有効期間がプログラムの実行全体に及ぶため、作成されたすべてのオブジェクトの間で、ある意味で「一意」および「共通」と見なされます。さらに一歩進めると、静的変数は、ローカル変数またはオブジェクトが格納されるのとは異なるコンピュータ メモリの場所に格納されます。

于 2013-08-11T19:35:51.210 に答える