Java printf抛出MissingFormatArgumentException错误,求助排查解决
错误原因与解决方案
错误原因
你错误地用+把格式字符串和变量直接拼接,传给printf的第一个参数已经是填充了变量的普通字符串,但原格式里的%-10s等占位符还保留着,却没有给这些占位符传递对应的参数。printf会把第一个参数当成格式模板,扫描里面的占位符,要求每个占位符都有对应的参数匹配,找不到匹配项就会抛出MissingFormatArgumentException。
比如你写的"%10s..." + employees[i] + ...,最终传给printf的字符串里还带着%-10s,但你没给这个占位符传对应的值,自然触发报错。
解决方法
把格式字符串和参数分开:格式字符串单独作为printf的第一个参数,需要填充的变量依次作为后续参数传递,让占位符和参数一一对应。
修正后的代码示例:
String[] employees = {"abcdef", "abcdefgh", "abcd", "abcdefghi", "abcde", "abcdef"}; String proNoun = gender[i] == 'F' ? "her" : "his"; // 去掉多余空格,避免格式混乱 // 格式模板作为第一个参数,变量按顺序传入对应占位符 System.out.printf("%-10s %s pay rate is $%d%n", employees[i], proNoun, pyRate[i]);
补充说明
%-10s:对应employees[i],左对齐,占10个字符宽度%s:对应proNoun,输出代词内容%d:对应pyRate[i],输出整数类型的薪资(如果是浮点数,改成%.2f保留两位小数更符合薪资场景)- 所有占位符的数量、顺序要和后面的参数完全匹配,类型也要对应(字符串用
%s,整数用%d,浮点数用%f)
内容的提问来源于stack exchange,提问作者ang
相关产品推荐
相关产品推荐

