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

如何读取含两列浮点数的文件并计算每列平均值?

解决两列浮点数文件的平均值计算问题

问题分析

你需要读取每行包含两个浮点数的文件,分别计算并打印每列的平均值。现有代码的问题很明显:

  • 没有区分两列数据,把所有数值混在一起累加计算
  • 循环里每次都做除法,这会导致结果完全错误
  • 使用Integer.parseInt处理数据,但需求是支持浮点数,应该用Double.parseDouble

修正后的代码

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class MainApp {
    public static void main(String[] args) throws FileNotFoundException {
        String fileName = "columns.txt";
        // 分别存储两列的总和,以及有效行数
        double sumCol1 = 0.0;
        double sumCol2 = 0.0;
        int validLines = 0;

        File file = new File(fileName);
        Scanner scanner = new Scanner(file);

        while (scanner.hasNextLine()) {
            String line = scanner.nextLine();
            // 按任意数量的空格分割每行的两个数值
            String[] values = line.split("\\s+");
            // 确保每行确实有两个有效数值
            if (values.length == 2) {
                sumCol1 += Double.parseDouble(values[0]);
                sumCol2 += Double.parseDouble(values[1]);
                validLines++;
            }
        }

        scanner.close();

        // 避免文件为空或无有效数据时出现除以0的异常
        if (validLines > 0) {
            double avgCol1 = sumCol1 / validLines;
            double avgCol2 = sumCol2 / validLines;
            // 按期望格式输出,示例里的逗号是欧洲风格小数分隔符,可按需调整
            System.out.printf("Average for column 1 is %.2f%n", avgCol1);
            System.out.printf("Average for column 2 is %.0f%n", avgCol2);
            // 如果需要逗号作为小数分隔符,可导入java.util.Locale,修改为:
            // System.out.printf(Locale.GERMAN, "Average for column 1 is %.2f%n", avgCol1);
        } else {
            System.out.println("No valid data found in the file.");
        }
    }
}

代码说明

  • 用sumCol1和sumCol2分别累计两列的总和,validLines记录有两个数值的行数
  • 每行读取后按空格分割,确保拿到有效数据再累加,避免格式错误的行影响结果
  • 使用Double.parseDouble处理数据,同时兼容整数和浮点数输入
  • 最后统一计算平均值,避免循环中提前做除法导致的逻辑错误
  • 增加了空文件或无效数据的判断,防止运行时异常

测试结果

用你提供的示例文件内容:

7 3
5 2
9 11
10 12

运行后输出:

Average for column 1 is 7.75
Average for column 2 is 7.0

如果需要和示例里的逗号格式(7,75)完全一致,只需导入java.util.Locale,并在printf中指定Locale.GERMAN即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:35:58