Java printf;线程中出现异常,格式转换非法

Java printf;线程中出现异常,格式转换非法,java,printf,Java,Printf,该程序编译得很好,但出现以下运行时错误: 食物来源消化 *******线程“main”java.util.IllegalFormatConversionException中的异常:f!=java.lang.String 在java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4302)中 位于java.util.Formatter$FormatSpecifier.printFloat(Formatter.java:28

该程序编译得很好,但出现以下运行时错误:

食物来源消化 *******线程“main”java.util.IllegalFormatConversionException中的异常:f!=java.lang.String 在java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4302)中 位于java.util.Formatter$FormatSpecifier.printFloat(Formatter.java:2806) 位于java.util.Formatter$FormatSpecifier.print(Formatter.java:2753) 位于java.util.Formatter.format(Formatter.java:2520) 位于java.io.PrintStream.format(PrintStream.java:970) 位于java.io.PrintStream.printf(PrintStream.java:871) at Nutrition.main(Nutrition.java:22)


DATA\u STR
需要一个
String
和一组
float
参数,在此处传递字符串时请阅读异常。看起来您正在使用
f
并给它一个字符串,不是吗?
import java.util.Scanner;

public class Nutrition
{
public static void main(String[] args)
{
    final String HEADING_STR = "%-10s%10s%10s%10s\n";
    final String DATA_STR = "%-15s%,10.1f%,10.1f.0%,10.1f\n";
    double protein1 = 150; // protein in chicken
    double digested1 = 50; // chicken digested
    double protein2 = 120; // protein in beef
    double digested2 = 30; // beef digested
    double availableProtein1, availableProtein2; // protein after digestion

    System.out.printf (HEADING_STR, "Food", "Source", "Digestion", "Available");
    System.out.printf (DATA_STR, "*******", "*******", "*******", "*******");

    availableProtein1 = protein1 - digested1;
    System.out.printf(DATA_STR, "Chicken", protein1, digested1, availableProtein1);
} // end main
} // end Nutrition
     final String DATA_STR = "%-15s%,10.1f%,10.1f.0%,10.1f\n"; 
   ... other code
     System.out.printf (DATA_STR, "*******", "*******", "*******", "*******");