ファイルを読み込んで各文字スペース記号の頻度をカウントするなどして、ハフマン ツリーを作成しようとしています。Priorityqueue を使用して、アイテムを最小から最大までキューに入れていますが、それらをキューに挿入すると、正しくキューに入れられません。これが私のコードです。ハフマンパッケージ;
import java.io.FileNotFoundException; java.io.FileReader をインポートします。import java.util.ArrayList; java.util.PriorityQueue をインポートします。java.util.Scanner をインポートします。
公開クラス ハフマン {
public ArrayList<Frequency> fileReader(String file)
{
ArrayList<Frequency> al = new ArrayList<Frequency>();
Scanner s;
try {
s = new Scanner(new FileReader(file)).useDelimiter("");
while (s.hasNext())
{
boolean found = false;
int i = 0;
String temp = s.next();
while(!found)
{
if(al.size() == i && !found)
{
found = true;
al.add(new Frequency(temp, 1));
}
else if(temp.equals(al.get(i).getString()))
{
int tempNum = al.get(i).getFreq() + 1;
al.get(i).setFreq(tempNum);
found = true;
}
i++;
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return al;
}
public void buildTree(ArrayList<Frequency> al)
{
PriorityQueue<Frequency> pq = new PriorityQueue<Frequency>();
for(int i = 0; i < al.size(); i++)
{
pq.add(al.get(i));
}
while(pq.size() > 0)
{
System.out.println(pq.remove().getString());
}
}
public void printFreq(ArrayList<Frequency> al)
{
for(int i = 0; i < al.size(); i++)
{
System.out.println(al.get(i).getString() + "; " + al.get(i).getFreq());
}
}
}
buildTree() メソッドでは、私が問題を抱えている場所です。私がやろうとしているのは、文字/スペース/記号と頻度を int として保持する頻度オブジェクトをキューに入れることです。頻度クラスはこれです。public class Frequency は Comparable { private String s; を実装します。プライベート int n;
Frequency(String s, int n)
{
this.s = s;
this.n = n;
}
public String getString()
{
return s;
}
public int getFreq()
{
return n;
}
public void setFreq(int n)
{
this.n = n;
}
@Override
public int compareTo(Object arg0) {
// TODO Auto-generated method stub
return 0;
}
}
最小から最大の順にキューに入れるために頻度番号を使用するようにpriorityqueueを取得するにはどうすればよいですか?