Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > format - проблема с параметрами


Автор: talker 16.5.2010, 19:33
Возникла непонятная ошибка с выполнением примера из одного учебника по Java

Код

StringBuffer buffer = new StringBuffer();
Formatter formatter = new Formatter(buffer, Locale.US);
formatter.format("Значение числа PI %6.3f", Math.PI);


Запускаю в Eclipse, получаю ошибку 

The method format(String, Object[]) in the type Formatter is not applicable for the arguments (String, double)


Удивился, попробовал привести double к Object[]

Код

formatter.format("Значение числа PI %6.3f", new Object[] {Math.PI});


Всё равно ошибка

Type mismatch: cannot convert from double to Object

Попробовал String.format() и System.out.format() - та же проблема. 

Гугль такую ошибку не знает, да и пример встречается в Гугле очень часто. Подскажите, я как-то неправильно настроил Eclipse или чего-то не понимаю?

Автор: jk1 16.5.2010, 19:46
Сначала проверьте используемую версию JDK, выглядит так, как будто она меньше 1.5 и не работает autoboxing. 
В качестве выхода в данной конкретной ситуации попробуйте написать так:
Код

StringBuffer buffer = new StringBuffer();
Formatter formatter = new Formatter(buffer, Locale.US);
formatter.format("Значение числа PI %6.3f", new Double(Math.PI));

Автор: talker 16.5.2010, 20:46
Цитата(jk1 @  16.5.2010,  19:46 Найти цитируемый пост)
выглядит так, как будто она меньше 1.5

1.6


Цитата(jk1 @  16.5.2010,  19:46 Найти цитируемый пост)
и не работает autoboxing. 

Не нашёл такой галочки в Eclipse. Можете подсказать? (гуглил)


Цитата(jk1 @  16.5.2010,  19:46 Найти цитируемый пост)
В качестве выхода в данной конкретной ситуации попробуйте написать так:

Не помогает.

Автор: jk1 16.5.2010, 21:12
Из чистого интереса скачал Eclipse в Java SE комплектации, ваш код компилируется и запускается прямо из коробки, без каких бы то ни было настроек.
Цитата

Не нашёл такой галочки в Eclipse. Можете подсказать? (гуглил)

Нет такой галочки и быть не может. Autoboxing - автоматическая обертка компилятором примитивных типов в объектные оболочки. То есть это feature языка и к IDE отношения не имеет.
Цитата

Не помогает. 

Описывайте симптомы, сообщения компилятора, исключения, возникающие у вас при проверке моего куска кода.

Автор: Nofate 17.5.2010, 10:17
Странно, что он просит на вход массив.
Попробуйте такой изощренный вариант: =)
Код

StringBuffer buffer = new StringBuffer();
Formatter formatter = new Formatter(buffer, Locale.US);
formatter.format("Значение числа PI %6.3f",  Arrays.asList(Math.PI).toArray());


Хотя врядли поможет...

Еще одна мысль: а если попробовать скомпилировать не эклипсом а непосредственно javac-ом?

Автор: jk1 17.5.2010, 10:45
Цитата

Странно, что он просит на вход массив.

Ничего странного в этом нет: в сигнатуре метода прописан varargs для того, чтобы можно было передавать переменное число аргументов. При передаче параметров происходит неявное преобразование их в массив Object[] c autoboxing'ом, если возникает необходимость.

Автор: Nofate 17.5.2010, 13:17
Вот не зря я боялся, что глупость скажу.. )
2 jk1: спасибо, что просветили )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)