2017-06-25 3 views
-3

私はインターネットを磨き、私の質問に対する答えを見つけることができません。私は現在、データ構造のコースに入っています。これは、すべてをゼロから作る必要があるため、この質問にとって重要です。私は現在宿題に取り組んでおり、問題は次のとおりです。LinkedListを自分の配列にインスタンス化するJavaの問題。データ構造コース

USetを使用して、Bagを実装します。 BagはUSetのようにadd(x)、remove(x)、find(x)メソッドをサポートしますが、重複した要素を格納することができます。 Bag内のfind(x)演算は、xと等しい要素があればそれを返します。さらに、Bagは、xに等しいBag内のすべての要素のリストを返すfindAll(x)操作をサポートしています。

私はコードをテストしようとしていますが、今はバットからヌルポインタ例外をスローします。私はデバッガを通過し、どこで失敗しているのか分かっていますが(配列リストを作成してリンクリストで埋めようとすると)、どうやって修正するのか分かりません。私も、私は明らかにそれが遭遇する他のエラーを知っているが、これは固定されている場合、私はそれらに直面するだろういけないを開始するためにそれを得たhaventので

Exception in thread "main" java.lang.NullPointerException 
at Bag.<init>(Bag.java:10) 
at Bag.main(Bag.java:198) 

:ここではどのようなエラー状態です。私はどんな助けにも感謝します。

備考:あらかじめ作成されたJava辞書は使用できません。すべては基本から行う必要があります。ここで

は私の全体のコードです:

public class Bag<T> { 

     final int ARR_SIZE = 128; 
     LinkedList[] theArray; 

     public Bag() { 

      for (int i = 0; i < ARR_SIZE; i++) { 
       theArray[i] = new LinkedList(); 
      } 
     } 

     public boolean add(T x) { 
      T element = x; 
      int hashKey = element.hashCode() % ARR_SIZE; 

      theArray[hashKey].addFirst(element, hashKey); 
      return true; 
     } 

     public T find(T x) { 

      T element = x; 
      int hashKey = element.hashCode() % ARR_SIZE; 

      return theArray[hashKey].findNode(element).getData(); 
     } 

     public T findAll(T x) { 
      T element = x; 
      int hashKey = element.hashCode() % ARR_SIZE; 

      System.out.print(theArray[hashKey].findAllElements(element)); 

      return element; 
     } 

     public T remove(T x) { 
      T element = x; 
      int hashKey = element.hashCode() % ARR_SIZE; 
      return theArray[hashKey].removeElement(element); 
     } 

     public int size() { 
      return ARR_SIZE; 
     } 

     public class Node { 

      T data; 
      int key; 
      Node next; 
      Node prev; 

      public Node(T t, int k, Node p, Node n) { 
       data = t; 
       key = k; 
       prev = p; 
       next = n; 
      } 

      public T getData() { 
       return data; 
      } 

      public void setData(T data) { 
       this.data = data; 
      } 

      public Node getNext() { 
       return next; 
      } 

      public void setNext(Node next) { 
       this.next = next; 
      } 

      public Node getPrev() { 
       return prev; 
      } 

      public void setPrev(Node prev) { 
       this.prev = prev; 
      } 

      public void display() { 
       System.out.println(data); 
      } 
     } 

     public class LinkedList { 

      Node header; 
      Node trailer; 
      int size = 0; 

      public LinkedList() { 
       header = new Node(null, -1, trailer, null); 
       trailer = new Node(null, -1, null, null); 
       header.setNext(trailer); 
      } 

      public int size() { 
       return size; 
      } 

      public boolean isEmpty() { 
       return size() == 0; 
      } 

      public void addFirst(T t, int hashKey) { 
       Node currentLast = header.getNext(); 
       Node newest = new Node(t, hashKey, header, currentLast); 
       header.setNext(newest); 
       currentLast.setPrev(newest); 
       size++; 
      } 

      public T add(T t) { 
       Node currentLast = header.getNext(); 
       Node newest = new Node(t, -1, header, currentLast); 
       header.setNext(newest); 
       currentLast.setPrev(newest); 
       size++; 

       return newest.getData(); 
      } 

      public T removeElement(T t) { 
       if (isEmpty()) { 
        return null; 
       } 

       T element = t; 
       return removeNode(findNode(element)); 
      } 

      public T removeNode(Node node) { 
       if (isEmpty()) { 
        return null; 
       } 

       Node pred = node.getPrev(); 
       Node succ = node.getNext(); 
       pred.setNext(succ); 
       succ.setPrev(pred); 
       size--; 

       return node.getData(); 
      } 

      public LinkedList findAllElements(T t) { 
       Node current = header.getNext(); 
       T element = t; 

       if (isEmpty()) { 
        return null; 
       } 

       LinkedList all = new LinkedList(); 

       while (current != null) { 
        if (current.getData() == element) { 
         all.addFirst(element, -1); 
        } else { 
         current = current.getNext(); 
        } 
       } 
       return all; 
      } 

      public Node findNode(T t) { 
       Node current = header.getNext(); 
       T element = t; 

       if (isEmpty()) { 
        return null; 
       } 

       while (current.getNext() != null && current.getData() != element) { 
        current = current.getNext(); 
       } 

       if (current.getNext() == null && current.getData() != element) { 
        System.out.println("Does not exist"); 
       } 

       return current; 
      } 
     } 

     public static void main(String[] args) { 

      Bag<Integer> bag = new Bag(); 
      bag.add(1); 
      bag.add(1); 
      bag.add(2); 
      bag.add(2); 
      bag.add(8); 
      bag.add(5); 
      bag.add(90); 
      bag.add(43); 
      bag.add(43); 
      bag.add(77); 
      bag.add(100); 
      bag.add(88); 
      bag.add(555); 
      bag.add(345); 
      bag.add(555); 
      bag.add(999); 

      bag.find(1); 
     } 
    } 

答えて

0

NullPointerExceptionsを避けるために、あなたのtheArrayを初期化します。

LinkedList[] theArray = new LinkedList[ARR_SIZE]; 
+0

大丈夫ですが、それは私が求めているもののnullポインタ例外を取り除いているようです。ありがとうございました。今私は別のエラーに遭遇していますが、私はそれを理解しようとします。 – Silver

関連する問題