2017-10-28 19 views
0

.txtファイルから文字を取り込むハフマンアルゴリズムを実装しようとしています。 txtファイルにはテキストの段落が含まれています。今、私は次のようにプログラムを実行する際にFileReader/Scannerが.txtファイルの内容ではなくファイル名を読み取る

java HuffmanCode large.txt 

それは出力を生成しますが、どのようなことが評価され、ファイルの名前、「large.txt」、というよりも、ファイルlarge.txt内のテキストでした。代わりにその内容を読むようにするにはどうすればいいですか?ご協力いただきありがとうございます。

public static void main(String[] args) throws IOException { 

     String inputFileName = args[0]; 
     FileReader reader = new FileReader(inputFileName); 
     Scanner in = new Scanner(reader); 

     int[] charFreqs = new int[256]; 
     // read each character and record the frequencies 
     for (char c : inputFileName.toCharArray()) 
      charFreqs[c]++; 

     // build tree 
     HuffmanTree tree = buildTree(charFreqs); 

     // print out results 
     System.out.println("SYMBOL\tWEIGHT\tHUFFMAN CODE"); 
     printCodes(tree, new StringBuffer()); 
    } 
} 
+0

Ahem - 'inputFileName.toCharArray()'。あなたのIDEは、未使用の警告があなたにそれを導き出すはずです。 –

答えて

1

あなたは本当に接近していた - あなただけのあなたのファイル名の文字を与えている、inputFileName.toCharArray()を反復処理しています。あなたがそれらをカウントしたいので、もしこれはおそらく、ファイル内の任意の改行文字を破棄します

while (in.hasNextLine()) 
{ 
    char[] line = in.nextLine().toCharArray(); 
    for (char c : line) 
     charFreqs[c]++; 
} 

注」:あなたは(あなたのファイルの内容を与える)あなたのin変数から文字の代わりに、例えばを読む必要がおそらくそれを手動で行う必要があります。または、あなたがすでに持っているFileReaderから素数char[]を読み込むことに切り替えます。これはおそらく上記のより良いアプローチです(Scannerが動作する "テキスト"データではなく生の文字データが必要です)。

+0

ありがとうございました!それは完璧だった。だから、私はラインで読んだり、チャーで読書するという選択肢があると言うのは正しいですか? – Joshua

+0

'InputStream'と友人は_bytes_を読みます。 「リーダー」と友達が文字を読む。 2つを混同しないでください。そして確かに 'byte'と' char'を混同しないでください。あなたが単純にキャストできるように見えるかもしれません。これはファイルから読み込む場合は非常に悪い考えです。 –

+0

@BoristheSpiderああ、私はCモードで考えていました。私は反映する答えを更新しました。 – hnefatl

関連する問題