You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 15:57:41