Подтвердить что ты не робот

Метод 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. Некоторые пользователи предположили, что это может быть проблема сборки, но похоже, что у меня есть обновленные версии.

4b9b3361

Ответ 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()
} );

Это может решить вашу проблему.