我试图创建一个程序来显示一天中的时间和必须使用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');
}
}
答案 0 :(得分:0)
您拥有s%%s
的第一个字符串必须是%s%s
答案 1 :(得分:0)
我相信你的格式字符串搞砸了。 而不是s %% s你应该使用%s%s
另外,您的空格和音量输出不应该在引号中。
答案 2 :(得分:0)
您的printf
声明错误原因
s%%s
代替%s%s
"space","ampmoutput"
将您的printf
声明更改为
System.out.printf("%2d:%2d%s%s %4f", hour,minute,space,ampmoutput,fractionofday);
答案 3 :(得分:0)
变量space和ampmoutput的范围在它们自己的if块中,不能从块外部引用。尝试在if语句之外声明space和ampmoutput,并在if语句中修改它们的值。