1

以下は、ハフマン木を作成するプロジェクトのファイルからの抜粋です。「パブリック クラス HLinkedList」がそれ自体で初期化される場合、.next、.left、.right などの HTreeNode のメソッドの別のファイル (以下にも示されています) は、HLinkedList のファイルで問題なく動作します。「extends java.util.Abstract~」が配置されると、HTreeNode メソッドを参照できなくなり、HTreeNode を同じファイルにコピー アンド ペーストする方法に頼ったため、コードの最初の行でそのように表示されます。これらの両方が同じファイルにあるということは、HLinkedList.HTreeNode と HTreeNode の間で衝突 (私が思うに) を引き起こしているということです。

public class HLinkedList<HTreeNode> extends java.util.AbstractSequentialList<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.
    }
}

 HTreeNode head;
static int nItem;

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

}


public void insertIntoPosition(HTreeNode node, int position) //inserts into position
{
    //first, the case where it's already in the list.
        HTreeNode currNode = head;
        while(currNode.next != null)
        {
            if(currNode.value == node.value)
            {
                currNode.frequency++;
            }

            currNode = currNode.next;           
        }
        if(currNode.value == node.value)
        {
            currNode.frequency++;
        }

HTreeNode ファイル:

public class HTreeNode {


    public static  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.
    }
}
4

1 に答える 1

1

拡張したい場合java.util.AbstractSequentialList<E>は、未加工のバージョンではなく汎用バージョンを拡張する必要があります。

クラスをインポートしていないか、メソッドが公開されていないか、正しい方法で呼び出していないため、コンパイラが不平を言っていました(非静的にして、クラス自体で呼び出しようとした可能性があります)。

アップデート


あなたが何を達成しようとしているのかはわかりませんが、コンパイラエラーを生成しないものであると信じています(いくつかのコメント付き)-

//E is a type parameter, meaning HLinkedList<E> is generic
public class HLinkedList<E> extends java.util.AbstractSequentialList<E> {

    //I think you can keep this private here, this only helps you to implement your
    //version of AbstractSequentialList, for anyone who will be using HLinkedList
    //are not going to worry about it
    private static 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)  {
            value = val;
            frequency = freq;
            left = l;
            right = r;
            next = n;
            code = ""; 
        }
    }

    private HTreeNode head;
    private int nItem; //made this non-static, each instance will need it's own copy

    public HLinkedList()  {
        this.head = null;
        this.nItem = 0;
    }

    public void insertIntoPosition(E element, int position)  {
        // probably create a new node here for element
        // and fix it at the location specified
    }

    //This is an abstract method declared in AbstractSequentialList
    //You need provide an implementation of it
    @Override
    public ListIterator<E> listIterator(int index) {

        return null;
    }

    //This is an abstract method declared in AbstractSequentialList
    //You need provide an implementation of it    
    @Override
    public int size() {

        return 0;
    }
}

ここで、クライアントがどのように使用するかを以下に示しますHLinkedList-

HLinkedList<Integer> list = new HLinkedList<Integer>();
//or
HLinkedList<String> list = new HLinkedList<String>();
于 2012-10-19T00:51:55.077 に答える