0

コード:

public class NodeType {

    public int value;
    public NodeType next;

    public NodeType(){
        value = 0;
        next = null;
    }

    public void printFollowingNodesInOrder(){
        System.out.println(this.value);
        while(this.next != null){
            this.next.printFollowingNodesInOrder();
        }
    }
}

テストクラス:

public class TestClass {

    public static void main(String[] args){

        NodeType nodeOne = new NodeType();
        NodeType nodeTwo = new NodeType();
        NodeType nodeThree = new NodeType();

        nodeOne.value = 1;
        nodeTwo.value = 2;
        nodeThree.value = 3;

        nodeOne.next = nodeTwo;
        nodeTwo.next = nodeThree;

        nodeOne.printFollowingNodesInOrder();       
    }   
}

このメインメソッドを実行すると、メソッドは3の後に終了していないようです。出力は次のとおりです。12 3 3 3 3 3 3 3

誰かが問題がどこにあるかを見ることができますか?

4

4 に答える 4

5

変化する

while(this.next != null){

if(this.next != null){

リストを繰り返し印刷する場合は、ループが必要になります。再帰的なソリューションでは、そうではありません。

于 2012-12-10T20:05:51.870 に答える
3
while (this.next != null)

最後から2番目のノード(関数が呼び出されているノード)には決して消えないprintFollowingNodesInOrderノードがあるため、最後のノードで呼び出しを開始すると、は永久にループします。next次のノードにアクセスするために再帰を使用している場合は、ループでそれを行う必要はありません。ループを外すと機能しますが、関数を呼び出す前に必ずnullを確認してください。

于 2012-12-10T20:05:23.680 に答える
2

基本ケースがなく、再帰メソッドのデフォルトの終了条件もありません。

于 2012-12-10T20:05:02.323 に答える
1

印刷機能は単純に次のようになります。

public void printFollowingNodesInOrder(){
    System.out.println(value);
    if(next != null){
        next.printFollowingNodesInOrder();
    }
}
于 2012-12-10T20:08:05.120 に答える