私は、これは非常に単純な質問/答えは知っています。しかし、私は念の適切な答えのになりたかったです。なぜ私はこのて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に別の質問を投稿してみてください、しかし、あなたを養ういませんよ。