为什么我得到一个简单的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和命令行中使用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中设置较低的合规性级别,这会使有趣的事情发生。
使用: 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() } );
这可能会解决您的问题。