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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:54:35