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

为何Java程序显示百分号时会出现崩溃问题?

问题原因

你的程序崩溃是因为main方法里使用了System.out.printf(investor.toString()):

  • toString()方法里用String.format("%-32.32s%15.2f%%\n", ...)生成了带单个%的字符串(%%在String.format里会被转义成单个%)
  • 而printf会把输入字符串里的%当作格式占位符处理,此时字符串里的%没有对应的参数,触发MissingFormatArgumentException异常,导致程序崩溃。
解决方案

有两种简单的修复方式:

方式1:替换printf为println(推荐)

直接用System.out.println输出toString()返回的字符串,它不会解析格式占位符,直接输出内容:

// 替换原main方法里的输出行
System.out.println(investor.toString());

方式2:双重转义百分号(仅作了解)

如果一定要保留printf,需要在toString()的String.format里把%%改成%%%%,这样最终生成的字符串里的%会被printf再次转义,避免解析错误:

// 修改toString里的这一行
String.format("%-32.32s%15.2f%%%%\n", "Percentage of yearly dividend: ", yearlyDividend) +
验证修改

修改后,程序运行时会正常显示带百分号的输出,不会崩溃。

内容的提问来源于stack exchange,提问作者mtzsouza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:07:13