为什么我得到一个简单的printf编译错误?

我的问题是为什么我得到了我的代码中的一个简单的printf实现下面的编译错误? 我正在复制我的代码如下:

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 %7.2f", myAccount.displayName(), myAccount.getBalance()); //System.out.printf("%3s", "abc"); } } 

在编译时,我得到以下错误:

 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:13) 

版本信息:

在Eclipse中的帮助 – >关于提供以下信息:

适用于Web开发人员的Eclipse Java EE IDE。

版本:Indigo Release Build编号:20110615-0604

我安装的JDK是JDK1.6.0_27

我一直在StackFlow上研究这个主题,并在下面的讨论中看到类似的问题:

String.format()不工作?

有些用户build议,这可能是一个生成问题,但看起来像我已经更新的版本。

这很令人费解。 您的帮助将不胜感激。

谢谢

检查您的项目的Compiler compliance level是否设置为至less1.5:

项目>属性> Java编译器

如果未设置“ Enable project specific settings ,请使用Configue Workspace Settings...链接检查全局Compiler compliance level

在这里输入图像描述

这似乎很奇怪,这又popup(同样的问题,你链接的其他职位)。 我想知道最近版本的Eclipse中是否有错误? 那个post上的提问者再也没有提供任何信息,所以我怀疑它可能已经消失了。 你的代码工作得很好。 如果我提供了一个合适的BankAccount类,它将在IntelliJ 10.5.2和命令行中使用javacjava 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中设置较低的合规性级别,这会使有趣的事情发生。

使用: System.out.printf(arg0, arg1, arg2)而不是System.out.printf(arg0, arg1)

像这样的临时修复可能会奏效。

而不是使用printf ,使用这个:

 System.out.printf("%s has %7.2f", new Object[]{ myAccount.displayName(), myAccount.getBalance() } ); 

这可能会解决您的问题。