Javaのノード配列ノード変異エラー - NULLポインタ

サイフマフムード:

私は、これは非常に単純な質問/答えは知っています。しかし、私は念の適切な答えのになりたかったです。なぜ私はこのてaddNodeメソッドを持つノードを変更することはできませんか?私のコード:

public class NODETEST {
public static void main(String[] args) {
    Table myTable = new Table(13);

    String word = "myWord";
    int index = 0;

    myTable.addNode(word, index);
    System.out.println(myTable.array[index].item);
    }
}// end NodeTest
class Table {
    Node[] array;
    public Table(int size) 
    {
        array = new Node[size];
        for(Node x: array)
        {
            x = null;
        }
    }
    public void addNode(String word, int index) {
        Node curr = this.array[index];
        if(curr == null)
        {
            curr = new Node(word, null);
        }
    }
}// table class
class Node {
    String item;
    Node next;
    public Node (String item, Node next)
    {
        this.item = item;
        this.next = next;
    }
}// Node class

出力 - >

Exception in thread "main" java.lang.NullPointerException
at NODETEST.main(NODETEST.java:10)

私はに、addNodeメソッドの内部で、この行を変更した場合=>

curr = new Node(word, null);

このラインで=>

this.array[index] = new Node(word, null);

できます。

私はこのCURR変数で何かが存在しているはず。なお、基準に関連したものにする必要があります。まさにここで何が起きているのでしょうか?

私はCURR変数を使用できない場合、どのように私は同じ配列[インデックス]に第三または第四のノードを追加することができます。リンクリストのような。私は「this.array [インデックス]」に直接アクセスするを使用する必要がある場合は、どのように私はこの正確な配列[インデックス]で、9日または10日のノードを修正/アクセスすることができ、そのため?

多分それの基本的なファンダメンタルズは、しかし、助けいただければ幸いです。

マーク:

それは、Javaの動作を参照する方法だからです。私は、以下のステップでステップを打破しますよ

Node curr = this.array[index];

上記のコードは、指示currのメモリアドレスを指し示すように変数をthis.array[index];したがっての値はcur意志がもっぱらの値に依存しますthis.array[index];そうであなたが変わるものは何でもthis.array[index];、それはで反映されますcurr

curr = new Node(word, null);

しかしながら、上記のコードセットがcurrのメモリアドレスである他のメモリアドレスを指すようにnew Node(word, null);したがって、そのコードからそこに関してこれ以上の関係ませんcurrし、this.array[index];そう何をするにしてもする、currの値は影響しませんthis.array[index];その逆と副を。

私はCURR変数を使用できない場合、どのように私は同じ配列[インデックス]に第三または第四のノードを追加することができます。リンクリストのような。私は「this.array [インデックス]」に直接アクセスするを使用する必要がある場合は、どのように私はこの正確な配列[インデックス]で、9日または10日のノードを修正/アクセスすることができ、そのため?

あなたは自分の変更する必要がaddNodeこれに機能を。これはちょうどそのインデックスの最後のノードにノードを追加することに注意してください。

public void addNode(String word, int index) {
    this.array[index];
    if(this.array[index] == null)
    {
        this.array[index] = new Node(word, null);
    } else {
        Node curr = this.array[index]
        // loop so that you can have the address of the last node
        // then stop once the .next is null since this means that it is the last node
        while(curr.next != null){
            curr = curr.next;
        }
        curr.next = new Node(word, null); // set the node
    }
}

注:あなたがそのインデックス内のノード間でノードを追加したいなら、あなたは上記の私のコードを編集する必要があります。私はつもりスプーンは、このように自分自身でそれを実装し、何か問題がある場合はSOに別の質問を投稿してみてください、しかし、あなたを養ういませんよ。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=300762&siteId=1