2017-03-14 5 views
3

私はこれをJavaクラスの特別な練習として取り組んでいますが、なぜ私のaddメソッドが動作していないのかわかりません。私はデバッガを行単位でコードを歩いてみましたが、どこが間違っているのかわかりません。それは明らかに論理エラーです。 addメソッドをテストすると動作するように見えますが、ノードを正しくリンクしていないか、データを格納していないと思われます。LinkedListのメソッドを追加できません。

したがって、割り当てはリンクリスト(重複を追加しない)を書き込むことです。 NodeクラスをLinkedSetクラスの内部関数として実行しました。私たちの教科書は、この特定の課題についてそれを示唆しました。 これは私が使用している追加メソッドです。これは追加の検査方法であり、また

public class LinkedSet <T> implements SetInterface <T> {  
     private Node firstNode; 
     private int numberOfEntries; 


     public LinkedSet(){ 
      firstNode = null; 
      numberOfEntries = 0; 
     } 

    public boolean add(T newEntry){ 
       boolean result = false; 
       Node aNewNode = new Node (newEntry); 

       //If Node is currently null then add data to front 
       if(firstNode == null) 
        firstNode = aNewNode; 
       else 
       { 
        //Add newEntry if it's not already stored. 
        if(!contains(newEntry) && numberOfEntries != 0) 
        { 
         aNewNode.next = firstNode; 
         firstNode.next = aNewNode; 
         firstNode = aNewNode; 

         result = true; 
        } 
        else 
         result = false; 
       } 

       return result;  
      }//End add 

     public boolean contains(T anEntry){ 
       boolean found = false; 

       while (!found && (firstNode != null)) 
       { 
        if(anEntry.equals(firstNode.getData())) 
         found = true; 
        else 
         firstNode = firstNode.getNextNode(); 
       } 

       return found; 
      } 
    private class Node { 

      private T data; 
      private Node next; 

      private Node (T theData){ 
       data = theData; 
       next = null; 
      } 

      private Node(T theData, Node nextNode){ 
       data = theData; 
       next = nextNode; 
      } 
    } //End Node class 
}End LinkedSet 

私ができるまで(別のテストアプリケーションを書きが必要と別のメインクラスで行われる)、ならびにいくつかの他の方法があり

private static boolean testAdd(SetInterface<String> aSet, String[] contentsToAdd){ 

     boolean result = false; 

     for (int index = 0; index < contentsToAdd.length; index++) 
     { 
      aSet.add(contentsToAdd[index]); 
      result = true; 
     } 

     return result; 
    }//End testAdd 

しかしaddメソッドを動作させてください。私はそれらのメソッドをあまり使うことができませんので、どこかに問題があると確信しています。 私は同様の質問でネットを見回しましたが、まだどこにいるのかわかりません。どんな助けにも感謝しています。

答えて

2
if(firstNode == null) 
    firstNode = aNewNode; 

あなたは、この場合にtrueを返す必要があります。

if(!contains(newEntry) && numberOfEntries != 0) 

このテストはあまり意味がありません。そこにエントリがない場合を呼び出すにはポイントがありませんが、はすでにので、numberOfEntriesがゼロであれば、とにかく、firstNodeのおかげでヌルいることを知っているよう

if(numberOfEntries != 0 && !contains(newEntry)) 

:それは他の方法でラウンドより理にかなってちょうど

if (!contains(newEntry)) 

NBあなたはnumberOfEntriesを維持していません。

1

私は徹底的にすべてのあなたのコードを読んでいないが、間違いがここにあります:それはnumberOfEntriesをインクリメントする必要があり

if(firstNode == null) 
     firstNode = aNewNode; 

。そのためnumberOfEntries

は常にゼロになり、追加適切

動作していない。同様に、あなたもelsenumberOfEntriesを維持していません。

0

が問題を抱えても、Containsメソッドを、あなたは

public boolean contains(T anEntry){ 
       boolean found = false; 
       Node ptr = firstNode; 
       while (!found && (ptr != null)) 
       { 
        if(anEntry.equals(ptr.getData())) 
         found = true; 
        else 
         ptr = ptr.getNextNode(); 
       } 

       return found; 
      } 
+0

firstNode = firstNode.getNextNode()というを変更しないでくださいfirstNodeの参照を変更しています。 –

関連する問題