为何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
相关产品推荐
相关产品推荐

