-2

そのため、リンクリストとして格納されている文字列であるクラスを構築しています。何らかの理由で、文字列を印刷しようとすると、 。が表示されNullPointerExceptionます。これは、2番目のコンストラクターでコピーした文字列を出力しようとした場合にのみ発生します。

class Node
{
char c;
Node next;
int index;
}

public class StringLink {

int len;
Node head= new Node();
public StringLink(String init)
{
   head.index=0;
   Node temp= head;
   len=init.length();
   int i=0;
   while (i<this.len)
   {
     Node n= new Node();
     n.c=init.charAt(i);
     n.index=i+1;
     temp.next=n;
     temp=n;
     i++;
   }


}

// constructor -- initialize object with another StringLink    
public StringLink(StringLink other)
{
   Node temp=other.head;
   temp=temp.next;
   len=other.length();
   for (int i=0; i<this.len; i++)
   {
     Node n= new Node();
     n.c= temp.c;
     n.index=i+1;
     if (temp.next!=null){
       temp=temp.next;
       n.next=temp;
     }
     else n.next=null;

   }
}

そして、これが機能しないtoString()メソッドです。

 public String toString()
{
  char[] narr= new char[this.len];
  Node temp= new Node();
  temp=this.head;
  temp=temp.next;
  System.out.println(temp.c);
  for (int i=0; i<this.len;i++)
  {
    narr[i]=temp.c;
    System.out.println(narr[i]);
    if (temp.next!=null)
      temp=temp.next;

  }
  return new String(narr);




}

助けてくれてありがとう!

4

1 に答える 1

0

2 番目のコンストラクターでthis.headは、 は初期化されないため、 ですnull。でアクセスしようとするとtoString、NullPointerException が発生します。

実際には、2 番目のコンストラクターでは、ノード オブジェクトを何にも割り当てていないため、単純に破棄するノード オブジェクトを構築しているように見えます。ロジックを実際に確認する必要があります。

于 2013-03-08T05:56:54.000 に答える