Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PrintStream类型中的方法printf(String,Object[])不适用于参数(…)_Java - Fatal编程技术网

Java PrintStream类型中的方法printf(String,Object[])不适用于参数(…)

Java PrintStream类型中的方法printf(String,Object[])不适用于参数(…),java,Java,为什么通过简单调用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.pri

为什么通过简单调用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);
    }
}
在编译时,我得到以下错误:

线程“main”java.lang中出现异常。错误:未解决的编译问题: PrintStream类型中的方法printf(字符串,对象[])不适用于 参数(字符串、字符串、双精度) 位于TestCodeBankAccInputs.main(TestCodeBankAccInputs.java:9) 这是什么原因造成的?我如何修复它

版本信息: Eclipse中的帮助->关于提供了以下信息:

面向Web开发人员的EclipseJavaEEIDE

版本:靛蓝版 构建id:20110615-0604

我安装的JDK是JDK1.6.0_27


我看到了。一些用户建议这可能是一个构建问题,但看起来我已经更新了版本。

这似乎很奇怪,它再次出现(与您链接的另一篇文章的问题相同)。我想知道最近版本的Eclipse中是否有bug?另一篇帖子上的提问者再也没有提供任何信息,所以我怀疑它可能已经消失了。你的代码运行得非常好。如果我提供了一个合适的BankAccount类,它将按照预期在IntelliJ 10.5.2中编译和运行,并使用
javac
java
,版本1.6.0\u 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中设置的遵从性级别仍然较低,这可能会使有趣的事情发生。

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

不要使用
printf
,而是使用以下命令:

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

这可能会解决您的问题。

检查项目的
编译器符合性级别是否至少设置为1.5:

项目>属性>Java编译器

如果未设置
启用项目特定设置
,请使用该页面上的
配置工作区设置…
链接检查全局
编译器符合性级别


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

是的,这可能会使它工作,但另一方面,当前代码没有理由不工作,而varargs的添加正是为了让您不必编写如此难看的代码。这确实是编译器的遵从性级别!!!我将其设置为1.6,代码编译时没有错误,运行良好。感谢所有人,尤其是卡洛斯、瑞安、波希米亚人、贾维德,感谢他们提供的精彩支持和帮助@Carlos我已经启用了特定于项目的设置,但问题仍然存在,我在使用开普勒有什么见解有人在IDEA 15中看到这个选项吗?@phillipsK也许这有帮助