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

Java实现plusMinus算法时arr.size()打印次数等于数组长度问题排查

问题修复方案

核心问题原因

  • 打印语句、占比计算代码全部写在for循环体内,循环执行次数等于数组长度,所以arr.size()的打印次数和数组size完全一致。
  • 循环内错误判断循环变量i的值,而非数组对应位置的元素值,会导致正负零的计数完全不符合预期。
  • Java中int类型直接做除法会触发整数截断,计算占比时会得到错误的0值,无法得到正确小数结果。
  • 未做小数位数格式化,无法满足保留6位小数的输出要求。

修复后代码(仅修改Result类,Solution类保持不变)

class Result {

    public static void plusMinus(List<Integer> arr) {
        int plus = 0;
        int minus = 0;
        int zero = 0;
        int arrSize = arr.size();
    
        // 循环仅做元素计数
        for (int i = 0; i < arrSize; ++i) {
            int currentNum = arr.get(i);
            if (currentNum == 0) {
                zero++;
            } else if (currentNum < 0) {
                minus++;
            } else {
                plus++;
            }
        }
        
        // 循环外计算占比,强转为double避免整数除法
        double plusPortion = (double) plus / arrSize;
        double minusPortion = (double) minus / arrSize;
        double zeroPortion = (double) zero / arrSize;
        
        // 格式化输出,保留6位小数
        System.out.printf("%.6f%n", plusPortion);
        System.out.printf("%.6f%n", minusPortion);
        System.out.printf("%.6f%n", zeroPortion);
    }

}

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(bufferedReader.readLine().trim());

        List<Integer> arr = Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
            .map(Integer::parseInt)
            .collect(toList());

        Result.plusMinus(arr);

        bufferedReader.close();
    }
}

修改点说明

  • 将占比计算、打印逻辑全部移到for循环外部,避免重复执行
  • 循环内改为获取数组对应下标的元素arr.get(i)做判断,修正计数逻辑
  • 计算占比时先将计数值强转为double类型,避免整数除法截断结果
  • 使用printf格式化输出,直接指定保留6位小数,符合输出要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:06:04