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

为何计算正负零比例的Java代码抛出IllegalFormatConversionException?

解决Java计算正负零占比时的IllegalFormatConversionException异常

问题定位

你遇到的IllegalFormatConversionException异常,核心原因是类型不匹配:

  • System.out.printf的%f格式符要求传入浮点类型(float/double),但代码中p/N、ne/N、z/N都是整数除法——两个int类型相除,结果仍为int,比如3/6会得到0而非0.5,同时这个int类型的参数和%f的类型要求不匹配,直接触发格式转换异常。
  • 另外整数除法本身也会导致计算结果完全错误,无法得到正确的占比小数。

修复方案

需要将除法运算转为浮点除法,同时调整输出格式匹配题目示例,修复后的完整代码如下:

import java.util.*;
import java.lang.*;
import java.io.*;

public class Main
{
    public static void main (String[] args) throws java.lang.Exception
    {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int[] arr = new int[N];
        for(int i = 0; i < N; i++)
            arr[i] = sc.nextInt();

        Solution s = new Solution();
        s.Answer(arr, N);
    }
}

class Solution
{
    public void Answer(int[] arr, int N)
    {
        int p = 0, ne = 0, z = 0;
        // 用增强for循环简化遍历逻辑
        for(int num : arr) {
            if(num > 0)
                p++;
            else if(num < 0)
                ne++;
            else
                z++;
        }
        // 将整数计数转为double,触发浮点除法
        double positiveRatio = (double)p / N;
        double negativeRatio = (double)ne / N;
        double zeroRatio = (double)z / N;
        
        // 按题目示例格式输出,一行内展示三个结果并保留四位小数
        System.out.printf("%.4f %.4f %.4f\n", positiveRatio, negativeRatio, zeroRatio);
    }
}

关键优化点

  • 浮点转换:通过(double)p将int类型的计数转为double,让除法运算自动变为浮点除法,得到正确的小数占比,同时匹配%f格式符的类型要求。
  • 简化遍历:用增强for循环替代原有的while循环,代码更简洁易读。
  • 输出对齐:合并三次printf调用,让结果在同一行输出,完全匹配题目示例的格式要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:25:25