Java新手求助:printf格式化输出遇MissingFormatArgumentException错误
错误原因分析
- 格式字符串参数不匹配:你写的
System.out.printf(fahr + "%.2f" + " degrees in Fahrenheit is%7.2f", FahrenheitToKelvin(fahr))是核心问题——这里把fahr直接拼在了格式字符串前面,导致格式字符串里实际包含两个%f占位符(%.2f和%7.2f),但你只传入了一个参数(转换后的开尔文温度),参数数量和占位符数量不匹配,直接触发了MissingFormatArgumentException。 - 冗余计算:代码里提前调用了一次
FahrenheitToKelvin(fahr)却没保存结果,属于没必要的重复计算。
修正后的代码
import java.util.Scanner; public class TemperatureConverter { public static void main(String[] args) { // 声明并实例化Scanner Scanner scan = new Scanner(System.in); // 声明变量存储输入和转换结果 float fahr; float kelvin; // 获取用户输入 System.out.println("Enter temperature in Fahrenheit : "); fahr = scan.nextFloat(); // 调用转换方法并保存结果 kelvin = FahrenheitToKelvin(fahr); // 格式化输出:两个占位符对应两个参数 System.out.printf("%.2f degrees in Fahrenheit is %7.2f degrees in Kelvin.%n", fahr, kelvin); // 关闭Scanner scan.close(); } // 华氏转开尔文方法 public static float FahrenheitToKelvin(float fahr) { return (float) ((fahr - 32) * 5.0/9 + 273.15); } }
关键修改点
- 把
fahr作为参数传入printf,让格式字符串里的%.2f对应输入的华氏温度,%7.2f对应转换后的开尔文温度,参数和占位符一一对应。 - 提前保存转换后的开尔文温度,避免重复调用方法计算。
- 调整输出语句格式,用
%n做平台无关的换行符,让结果更易读。 - 关闭Scanner,养成资源管理的好习惯。
- 把转换方法里的
5/9改成5.0/9,避免整数除法导致的精度丢失(原代码因强制转float结果偏差不大,但浮点除法更严谨)。
内容的提问来源于stack exchange,提问作者Alana
相关产品推荐
相关产品推荐

