-2

FileWriterを使用してJavaでファイルに書き込みますが、動作がおかしいです。

try
{
    newFile = new File(typeOfData);
    if (!newFile.exists())
    {
        newFile.createNewFile();
        writer = new FileWriter(newFile);

        for (Map<String, Double> tfidf : tfidfs)
        {
            Set<String> keys = tfidf.keySet();
            Iterator<String> iterator = keys.iterator();

            //int i = 1;
            while(iterator.hasNext())
            {
                String featureValue = iterator.next() + ":" + tfidf.get(iterator.next()) + " ";
                //System.out.print(featureValue);
                writer.write(featureValue);

                //i++;
            }
            writer.write("\n");
            //System.out.println();
            writer.flush();
        }
        //writer.flush();
        writer.close();
    }
}

whileループでは、の代わりにiterator.next()変数を使用するint i = 1i++、すべての値とすべてが正しく書き込まれます。しかし、このコードを記述どおりに使用すると、何も含まれていない空白のファイルが作成されます。なぜこれが起こっているのか分かりません。助言がありますか?

4

1 に答える 1

4
String featureValue = iterator.next() + ":" + tfidf.get(iterator.next()) + " ";

next()から2つのキーを取得して、2回呼び出しましたSet。結果String featureValueには、最初のキーと2番目のキーの値が含まれます。

String key = iterator.next();
String featureValue = key + ":" + tfidf.get(key) + " ";

編集して追加:次に、現在出力がない理由を推測すると、キーの数が奇数になり、最後に、2番目のキーが残っていない場合next()、例外がスローされます(これは私が無視していると思います)、ファイルにフラッシュしておらず、出力がありません。キーの数が偶数の場合...実際には「機能」し、期待していた半分の行を含むファイルが作成されます;)

于 2012-12-22T17:12:01.863 に答える