2016-08-31 13 views
0

私はAdjacency Listを使用してグラフを実装する際にチュートリアルタスクを実行していますが、コンストラクタに問題があります。私が持っている与えられたGraphTester.javaJavaの一般化 - 指定された型にコンストラクタを適用することはできません

//Constructor cannot be applied to given types 
FriendShipGraph<String> graph = new AdjList<String>(); 

その後FriendShipGraph.javaがインタフェースを提供します。

public interface FriendshipGraph<T extends Object> { 
    public static final int disconnectedDist = -1; 

    public abstract void addVertex(T vertLabel); 
    public abstract void addVertex(T srcLabel, T tarLabel); 
    //Other abstract methods 
} 

だから私はLinkedListを実装するクラスを記述する必要があります。

public class SinglyLinkedList implements LinkedListInterface { 
    private Node head; 
    private int length; 

    public int getLength() { 
     return length; 
    } 

    public SinglyLinkedList() { 
     head = null; 
     length = 0; 
    } 

    //Other methods to manage the linked list 

    public class Node 
    { 
     private String value; 
     private Node nextNode; 

     public Node(String value) { 
      this.value = value; 
      nextNode = null; 
     } 

     //Other methods to manage node 
    } 
} 

そして私はの配列を使用しなければなりません私は私自身のテストファイルを書くとき

public class AdjList <T extends Object> implements FriendshipGraph<T> { 
    SinglyLinkedList[] AdjList = null; 

    //This is the constructor containing the error 
    public AdjList(T vertices) { 
     int qty = Integer.parseInt((String) vertices); 
     AdjList = new SinglyLinkedList[qty]; 

    for (int i = 0; i < AdjList.length; i++) 
     AdjList[i] = new SinglyLinkedList(); 
    } 
} 

は、しかし、私はエラーなしでこのようなAdjListオブジェクトを作成しますが、これはクラスが必要とするものではありません:

AdjList<String> aList = new AdjList<String>("9"); 

だから、誰も私を提案してくださいGraphを実装するためにコンストラクタの修正方法どうもありがとうございます!

+0

ヒント:javaコーディングガイドラインについて読む。フィールド名はlowerCaseから始まります。 – GhostCat

+1

* FYI:* ''は ''と言っても非常に長いです – Andreas

答えて

1
FriendShipGraph<String> graph = new AdjList<String>(); 

AdjJustには、引数のないコンストラクタはありません。 AdjList(T vertices)の場合のように、独自のコンストラクタを提供する場合、デフォルトのゼロ引数コンストラクタは生成されません。

デフォルトコンストラクタを指定する必要があります。たぶん、次のようなものが示されていない他のコードに応じて、十分かもしれません:

public class AdjList <T extends Object> implements FriendshipGraph<T> { 

    SinglyLinkedList[] AdjList = null; 

    public AdjList() { 

    } 

    //This is the constructor containing the error 
    public AdjList(T vertices) { 
     int qty = Integer.parseInt((String) vertices); 
     AdjList = new SinglyLinkedList[qty]; 

     for (int i = 0; i < AdjList.length; i++) 
      AdjList[i] = new SinglyLinkedList(); 
    } 
} 

私はなぜあなたは量を表現する文字列を渡しているが、これは、少なくともコンパイルを修正する必要があり、正確にはわかりませんあなたが尋ねているエラー。トレイ・から正解に加えて

1

、いくつかのより多くの発言:

あなたの一引数のコンストラクタはT verticesを言います。しかしあなたはそこで(ストリング)に "ハード"キャストをしています。 TがString以外のものであれば、そのコードは例外をスローします。

だから、あなたはどちらかのAdjList(恐ろしい名前)をclass AdjList implements FriendshipGraph<String>のようにする必要があります。またはジェネリックタイプを文字列に「修正」したくない場合は、qty = Integer.parseInt(verties.toString())

でも、それを見て - それは変わっていませんか?あなたは、文字列に数字であると思われるものを、それから数値を解析するために回しています。たぶんそれは整数でなければならないのですか?

次に、という名前ので作業します。 "qty"のような略語を使う必要はまったくありません。なぜあなたはそれをnumberOfListsか何か同じように呼んでいないのですか?

関連する問題