为什么printf会产生编译器错误?

时间:2014-07-11 22:25:36

标签: java printf

我试图创建一个程序来显示一天中的时间和必须使用printf的一天中的一小部分。我无法弄清楚为什么printf会产生这个编译错误:

Exception in thread "main" java.util.DuplicateFormatFlagsException: Flags = ' '
at java.util.Formatter$Flags.parse(Formatter.java:4140)
at java.util.Formatter$FormatSpecifier.flags(Formatter.java:2555)
at java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2625)
at java.util.Formatter.parse(Formatter.java:2480)
at java.util.Formatter.format(Formatter.java:2414)
at java.io.PrintStream.format(PrintStream.java:920)
at java.io.PrintStream.printf(PrintStream.java:821)
at FractionOfDay.fractionOfDay(FractionOfDay.java:22)
at FractionOfDay.main(FractionOfDay.java:26)

代码:

public class FractionOfDay
{
   public static void fractionOfDay(int hour, int minute, int second, char ampm)
   {
      double fractionofday = hour/12 + minute/720 + second/43200 + ampm/2;
      if (ampm == 'A')
      {
         String ampmoutput = "AM";
      }
      else
      {
         String ampmoutput = "PM";
      }
      if (hour < 10)
      {
         String space = " ";
      }
      else
      {
         String space = "  ";
      }
      System.out.printf("%2d:%2ds%%s  %4f", hour,minute,"space","ampmoutput",fractionofday);
   }
   public static void main(String[] args)
   {
      fractionOfDay(7,15,0,'P');
   }
}

4 个答案:

答案 0 :(得分:0)

您拥有s%%s的第一个字符串必须是%s%s

答案 1 :(得分:0)

我相信你的格式字符串搞砸了。 而不是s %% s你应该使用%s%s

另外,您的空格和音量输出不应该在引号中。

答案 2 :(得分:0)

您的printf声明错误原因

  1. 使用s%%s代替%s%s
  2. 将输出变量放在引号"space","ampmoutput"
  3. 将您的printf声明更改为

    System.out.printf("%2d:%2d%s%s  %4f", hour,minute,space,ampmoutput,fractionofday);
    

答案 3 :(得分:0)

变量space和ampmoutput的范围在它们自己的if块中,不能从块外部引用。尝试在if语句之外声明space和ampmoutput,并在if语句中修改它们的值。