0

クラス内にネストされた Node クラスを定義し、

class HNode<T extends ArrayList> {
    private T _datum;
    private HNode<T> _prev;
    private HNode<T> _next;

    public HNode(T datum, HNode<T> prev, HNode<T> next) {
        _datum = datum;
        _prev = prev;
        _next = next;
    }

    public HNode<T> getNext() {
        return _next;
    }

そして、この Node クラスを作成したときに、_datum、_prev、および _next フィールドを手動で指定しました。

    _r0 = new HNode<ArrayList<String>>(_al.get(3), _r0, _r1);
    _r1 = new HNode<ArrayList<String>>(_al.get(4), _r0, _r2);
    _r2 = new HNode<ArrayList<String>>(_al.get(5), _r1, _pos3);
    _pos3 = new HNode<ArrayList<String>>(_al.get(6), _r2, _pos4);
    _pos4 = new HNode<ArrayList<String>>(_al.get(7), _pos3, _pos5);

(これは初期化の一部です。)

やあ。「Structure」という名前のクラス内にネストされた Node クラスを定義し、

class HNode<T extends ArrayList> {
    private T _datum;
    private HNode<T> _prev;
    private HNode<T> _next;

    public HNode(T datum, HNode<T> prev, HNode<T> next) {
        _datum = datum;
        _prev = prev;
        _next = next;
    }

    public HNode<T> getNext() {
        return _next;
    }

そして、この Node クラスを作成したときに、_datum、_prev、および _next フィールドを手動で指定しました。

    _r0 = new HNode<ArrayList<String>>(_al.get(3), _r0, _r1);
    _r1 = new HNode<ArrayList<String>>(_al.get(4), _r0, _r2);
    _r2 = new HNode<ArrayList<String>>(_al.get(5), _r1, _pos3);
    _pos3 = new HNode<ArrayList<String>>(_al.get(6), _r2, _pos4);
    _pos4 = new HNode<ArrayList<String>>(_al.get(7), _pos3, _pos5);

(これは初期化の一部です。_al は ArrayList の ArrayList であり、以前は Collections.shuffle(_al) メソッドを呼び出していました。)

次に、'Structure' クラス内で getPosition メソッドを定義したいと考えました。このメソッドをテストしたところ、NullPointerException がスローされました。

このメソッドを if 文で分割した理由は、2 番目と 3 番目、16 番目と 17 番目のノードが互いに接続されていないためです。

pos.getNext(); の for ループだと思います。ただし、条件ステートメントではなく、問題の原因である可能性があります。

public HNode<ArrayList<String>> getPosition(int index) {
    HNode<ArrayList<String>> pos = null;
    if(index<3) {
        pos = _l0;
        for(int i=0; i<index; i++) {
            pos = pos.getNext();
        }
    }
    else if(3<=index && index <= 16) {
        pos = _r0;
        for(int i=0; i<(index-3); i++) {
            pos = pos.getNext();
        }
    }
    else if(index <= 17 && index <= 24) {
        pos = _w1;
        for(int i=0; i<(index-17); i++) {
            pos = pos.getNext();
        }
    }
    return pos;
}

これが NullPointerException を与える理由を知っていますか? 私はしばらくこれを理解しようとしていますが、できませんでした。アドバイスをお願いします。ありがとうございました!


getNext() メソッドを呼び出すとエラーが発生します。何か問題ある?

4

1 に答える 1

0

null 参照の個人的な経験からすると、

 _r0 = new HNode 
 _pos3 = new HNode etc  

無効です。デバッガを使用してみましたか?

于 2013-04-03T02:44:01.360 に答える