Метод printf (String, Object []) в типе PrintStream не применим для аргументов (...)
Почему я получаю следующую ошибку компиляции с простым вызовом printf? Мой код:
import java.util.Scanner;
public class TestCodeBankAccInputs
{
public static void main(String[] args)
{
String displayName = "Bank of America Checking";
int balance = 100;
System.out.printf("%s has %7.2f", displayName, balance);
}
}
При компиляции я получаю следующую ошибку:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method printf(String, Object[]) in the type PrintStream is not applicable for the
arguments (String, String, double)
at TestCodeBankAccInputs.main(TestCodeBankAccInputs.java:9)
Что вызывает это и как я могу его исправить?
Информация о версии:
Help- > About in Eclipse дает следующую информацию:
Eclipse Java EE IDE для веб-разработчиков.
Версия: Indigo Release
Идентификатор сборки: 20110615-0604
Установленный JDK - JDK1.6.0_27
Я видел эту аналогичную проблему в отношении String.format. Некоторые пользователи предположили, что это может быть проблема сборки, но похоже, что у меня есть обновленные версии.
Ответы
Ответ 1
Убедитесь, что для Compiler compliance level
установлено не менее 1,5 для проекта:
Проект > Свойствa > Компилятор Java
Если Enable project specific settings
не задано, используйте ссылку Configue Workspace Settings...
на этой странице, чтобы проверить глобальный Compiler compliance level
.
![enter image description here]()
Ответ 2
Кажется странным, что это снова появилось (такая же проблема, как и другая запись, которую вы связали). Интересно, есть ли ошибка в последней версии Eclipse? Обвинитель на этом другом посту никогда не возвращался с дополнительной информацией, поэтому я подозреваю, что он, возможно, просто ушел. Ваш код работает отлично. Если я поставлю соответствующий класс BankAccount, он компилируется и выполняется как ожидалось как в IntelliJ 10.5.2, так и в командной строке с javac
и java
, версия 1.6.0_26:
import java.util.Scanner;
public class TestCodeBankAccInputs {
public static void main(String[] args) {
Scanner inStream = new Scanner(System.in);
BankAccount myAccount = new BankAccount(100, "Bank of America Checking");
System.out.print("Enter a amount: ");
double newDeposit = inStream.nextDouble();
myAccount.deposit(newDeposit);
System.out.printf("%s has %9.2f", myAccount.displayName(), myAccount.getBalance());
//System.out.printf("%3s", "abc");
}
static class BankAccount {
private double balance;
private String name;
public BankAccount(double balance, String name) {
this.balance = balance;
this.name = name;
}
public String displayName() {
return name;
}
public double getBalance() {
return balance;
}
public void deposit(double newDeposit) {
this.balance += newDeposit;
}
}
}
Я все еще (как и для другого сообщения) рекомендую чистую сборку, но проверили ли вы свой уровень соответствия компилятора в Eclipse? Вы можете компилировать с 1,6 JDK, но все еще имеют более низкий уровень соответствия, установленный в среде IDE, что может привести к забавным вещам.
Ответ 3
Используйте System.out.printf(arg0, arg1, arg2)
вместо System.out.printf(arg0, arg1)
.
Ответ 4
Временное исправление, подобное этому, может работать.
Вместо использования printf
используйте это:
System.out.printf("%s has %7.2f", new Object[]{
myAccount.displayName(), myAccount.getBalance()
} );
Это может решить вашу проблему.