0

したがって、複数の変数を格納するためのリンクリストが必要なので、手作りのリンクリストADTを使用するだけでなく、collections.sort()からのJavaのリンクリストのコンパレータソートも必要です。

そこで、次のようにコードを編集してみました。

public class HLinkedList <HTreeNode>  extends LinkedList <HTreeNode>
{

public class HTreeNode {


    public HTreeNode left;
    public HTreeNode right;
    public HTreeNode next;
    public int frequency;
    public char value;
    public String code;
    public HTreeNode(int freq, char val, HTreeNode l, HTreeNode r, HTreeNode n, String code) // code is the path taken to this node, how to explain it in code?
    {
        value = val;
        frequency = freq;
        left = l;
        right = r;
        next = n;
        code = ""; // just initialized ,but have to think through logic.
    }
}

しかし、これを行うと、public class HLinkedList(使用できない場合を除いて問題ありませんが Collections.sort(HList, comparatorA)、Javaのリンクリストが必要な1行のコード)ではなく、

とにかく、上記のようなコードがある場合は、

cannot make static reference to non-static type HTreeNode in following line, 

HTreeNodeの下に赤い裏地が付いています。LinkedListを拡張しようとしない場合、これは発生しません。

public static void insertIntoPosition(HTreeNode node, int position)

また、上記のエラーに続いて、のエラーが発生します

public HLinkedList() //constructor
{
    head = null; //inital value
    nItem = 0;//counter

}

コード内で複数回出現する場合は、非静的ヘッドを静的に参照できないことを示しています。通常、このようなものが表示されたら、[その頭を静的にする]をクリックしますが、この場合、さらに多くのエラーがポップアップし、すべての「頭」参照を指します。

LinkedListの拡張を試みて失敗したときに何が起こっているのか、または拡張しないことになっているのに何か他のことをしているのかどうかを知りたいのですが。

4

2 に答える 2

2

次のメソッドはクラスメソッドです。

 public static void insertIntoPosition(HTreeNode node, int position)

HLinkedListしたがって、呼び出されるためにのインスタンスは必要ありません。

ただし、クラスHTreeNode内部クラスであり、インスタンス化するにはの「attahced」インスタンスが必要HLinkedListです。

これらの2つの事実は互いに矛盾しています(このメソッドでこのタイプのオブジェクトをインスタンス化することはできません)

これを克服するためにstatic、の宣言にキーワードを追加できます。HTreeNode

public static class HTreeNode { //note the static keyword usage
    ....
}
于 2012-10-19T00:01:27.793 に答える
2

もう1つの問題は、に汎用型修飾子を設定しないことですHLinkedList。それはあなたが思っていることをしていません。指定しているのは、「何か」を格納するクラスを作成することです。これは内部クラスではありません。HTreeNode代わりに、クラスを外部に移動してから、HLinkedList代わりにこれを使用する必要があります。

public class HLinkedList extends LinkedList <HTreeNode>

それ以外の場合、ジェネリック型は内部クラスを非表示にし、HLinkedList文字列を格納するを作成することもできます。

HLinkedList<String> hll = new HLinkedList<String>();
hll.add("Hello World");
于 2012-10-19T00:41:31.073 に答える