2016-04-01 8 views
-2

У меня есть программа, которая подсчитывает количество букв в текстовом файле, и я хочу выход бытьstring.Format косяк частота высчитывает чисел Java

Letter   Amount   Freq 
    A    46    9.3456% 
    .    .     . 
    .    .     . 
    .    .     . 
    Z    2    0.0234% 

И у меня есть этот код

 System.out.println("Letter   Amount   Freq"); 
    for(int i = 0; i < 26; i++){ 
     System.out.println(String.format("%c     %d\n  %5f", i + 'A', count[i], (count[i]/totChar)*100 + "%")); 

Я просто получаю это сообщение об ошибке:

Exception in thread "main" java.util.IllegalFormatConversionException: f != java.lang.String 

Может кто-нибудь сказать, что не так?

EDIT для нового выхода:

Letter   Amount   Freq 
     A    46     
            9.234% 
     B    32     
            4.437% 
     .    .     
     .    

Так вот новый выход и, как вы видите частота не на той же линии, что и другие!

EDIT для нового кода:

 System.out.println("Letter:   Amount:   Frequence:"); 
    for(int i = 0; i < 26; i++){ 
     System.out.println(String.format(" %c    %d\n        %f%%", i + 'A', count[i], (count[i]/totChar)*100)); 
+5

'(count [i]/totChar) * 100 +"% "' приведет к строке. Используйте строку формата '" ...% 5f %% "и значение' (count [i]/totChar) * 100' вместо. Также обратите внимание, что если 'count' и' totChar' являются целыми типами, вы не получите желаемого результата, используйте '(count [i]/(double) totChar) * 100' в этом случае. – Thomas

+0

спасибо @Thomas Это не приходит в том же ряду, что и другие сейчас, можно ли исправить? – JohnBanana

+1

Я не знаю, о чем вы говорите, это должно быть в одной строке. Обратите внимание, что в строке формата я предположил, что «...» означает все, что у вас есть на переднем плане, - это не буквальное. – Thomas

ответ

0

@Thomas дал вам правильный ответ на его комментарий, я просто хотел бы добавить небольшое пояснение к этому.

Ваша линия:

System.out.println(String.format("%c     %d\n  %5f", i + 'A', count[i], (count[i]/totChar)*100 + "%")); 

Определяет строку с тремя аргументами; char, int и float. Однако, когда ваши аргументы оцениваются, один из них не соответствует указанному типу. В этом случае вы правильно рассчитали значение float (count[i]/totChar)*100, но затем добавите%. Это имеет эффект преобразования значения в строку, таким же образом, вы можете добавить арифметику при конкатенации строк, например String x = "string with " + (0+1) + " ints";

Вместо того, чтобы процент знак должен быть добавлен внутри самой строки, а не к какому-либо из аргументов (если, конечно, они также не являются струнами).

@ Предложение Томаса об использовании %5f%% делает именно это. Это «% 5f» для формата и «%%» для добавления отмеченного знака процента.

+0

Окей Спасибо, но теперь я получаю этот выход 'Пусть Сумма Frequency A 46 9,406953% B 9 1,840491% C 13 2,658487%' Черт, я не могу получить его, чтобы переключить line, но я попытаюсь описать это. Буква и сумма находятся в одной строке, но частота принадлежит этой букве, одна строка вниз – JohnBanana

+0

Да, фрагменты кода в комментариях не работают так же, как в вопросах и ответах, вы теряете много форматирования. Не могли бы вы добавить его в свой вопрос в качестве редактирования, я думаю, что будет легче следовать. – ewanc

 Смежные вопросы

  • Нет связанных вопросов^_^