2015-02-08 3 views
0

У меня есть следующий кодPrintWriter искажен выход

//Put the collection frequencies into a file    
    Iterator iter = docFreq.entrySet().iterator(); 

    while(iter.hasNext()) 
    { 
     Map.Entry tf = (Map.Entry)iter.next(); 
     pw.write((String)tf.getKey()); 
     pw.write("\t"); 
     pw.write((int)tf.getValue()); 
     pw.write("\t"); 
     float fractionofDocs = (int)tf.getValue()/(float)size; 
     pw.println(fractionofDocs); 
    } 

    pw.close(); 

Я вижу искаженные выход для второго значения, записываемые в файл, т.е., pw.write((int)tf.getValue());

Выход что-то вроде этого

and õ 0.9607843 
of ë 0.92156863 
the ê 0.91764706 
on Þ 0.87058824 
information Ö 0.8392157 

Я могу видеть второе поле, напечатанное как значение int, если последнее поле опущено, то есть после удаления этих строк из while

pw.write("\t"); 
float fractionofDocs = (int)tf.getValue()/(float)size; 
pw.println(fractionofDocs); 

Может кто-нибудь скажет мне, где я ошибаюсь?

+0

'pw.println (" "+ fractionofDocs);' или 'pw.println (String.valueOf (fractionofDocs));' То же самое для всех других номеров, которые вы печатаете. –

+0

@HovercraftFullOfEels Спасибо. Это сработало. –

ответ

1

Есть две перегрузки для Writer.write - одна, которая пишет один символ, и тот, который пишет String. Это аналогично тому, как OutputStream.write пишет либо байтовый, либо байтовый массив.

Вы звоните Writer.write(int), который принимает int, преобразует его в char и пишет, что char.

Вы хотите использовать print вместо write.