0

リンクされたリストを使用して同様のクラスを作成しようとしてStringBuilderいますが、コンストラクターのどこかを台無しにしていると思います。誰でもここで問題を見つけることができますか? 問題は、次のノードに移動する方法にあると思います。

ノード クラス:

private class CNode
{
    private char data;
    private CNode next;

    private CNode(char c)
    {
        data = c;
        next = null;
    }

    private CNode(char c, CNode nextNode)
    {
        data = c;
        next = nextNode;
    }
}

コンストラクタ:

private CNode firstNode;
private int length;

public MyString(String s)
{
    if(s == null)
    {
        this.length = 0;
        this.firstNode = null;
    }
    else if(s.length() == 1)
    {
        this.length = 1;
        this.firstNode.data = s.charAt(0);
        this.firstNode.next = null;
    }
    else
    {
        this.length = s.length();
        CNode node = null;
        CNode nextNode = null;

        this.firstNode = new CNode(s.charAt(0), node);

        for(int i = 1; i < s.length(); i++)
        {
            node = new CNode(s.charAt(i), nextNode);
            node = node.next;
        }
    }
}
4

2 に答える 2

2

私が見る1つの問題は

this.firstNode = new CNode(s.charAt(0), node);

その行が実行されると、 nodenull になるため、最終的にはfirstNode何もリンクされません。さらに、リンクを構築しようとしている for ループでは、 を割り当てることはありませんがnextNode、それを使用して 1 つのノードを次のノードにリンクしようとします。nullしたがって、すべてのノードは、 の初期値である にリンクすることになりますnextNode

別の問題:

this.firstNode.data = s.charAt(0);
this.firstNode.next = null;

this.firstNodeそのコードの実行時にまだ null であるため、代わりに新しい CNode を作成する必要があり、NullPointerException が発生します。

于 2013-10-26T01:08:00.197 に答える
1

ここには他の問題があるかもしれませんが、次のコード ブロックを考慮してください。

else if(s.length() == 1)
{
    this.length = 1;
    this.firstNode.data = s.charAt(0);
    this.firstNode.next = null;
}

を割り当てていないことに注意してください。これは、コードの 2 行目を実行しthis.firstNodeたときに を取得することを意味します。NullPointerException書き込む前にノードを割り当ててみてください。

お役に立てれば!

于 2013-10-26T01:07:49.717 に答える