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

如何按指定方法计算文本文件中数字的和?代码问题修正

问题分析与修复方案

你的代码返回0的核心原因是调用Problem1计算总和时,写入文件的内容还在PrintWriter的缓冲区里,没有实际写入磁盘。此时读取文件相当于读空文件,总和自然是0。

具体修复步骤

  • 调整写入与读取的顺序:先写完内容,关闭PrintWriter(强制刷新缓冲区到磁盘),再调用Problem1计算总和,最后重新打开文件追加写入总和
  • 让Problem1方法直接使用传入的file参数,避免重复创建File对象
  • 不要留空的catch块,至少打印异常信息,方便排查问题

修改后的完整代码

package module4labs;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.Scanner;

public class Module4Labs {
    public static void main(String[] args) {
        new Module4Labs();
    }

    public Module4Labs() {
        File outFile = new File("Problem1.txt");
        try {
            // 第一步:写入内容到文件
            PrintWriter pw = new PrintWriter(new FileOutputStream(outFile));
            // 如果是处理你假设的11 3 6 9 10 7,把下面循环换成pw.print("11 3 6 9 10 7 ");即可
            for (int x = 0; x < 5; x++) {
                pw.print((int)(Math.random()*10)+1 + " ");
            }
            pw.close(); // 关闭后数据才会写入磁盘

            // 第二步:计算总和
            int sum = Problem1(outFile);

            // 第三步:追加写入总和到文件
            PrintWriter appendPw = new PrintWriter(new FileOutputStream(outFile, true));
            appendPw.print(sum);
            appendPw.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace(); // 打印异常信息
        }

        // 读取文件内容并输出
        try {
            Scanner input = new Scanner(outFile);
            while (input.hasNextLine()) {
                System.out.println(input.nextLine());
            }
            input.close();
        } catch (FileNotFoundException e) {
            System.out.println("File Not Found.");
            e.printStackTrace();
        }
    }

    public int Problem1(File file) throws FileNotFoundException {
        int sum = 0;
        Scanner input = new Scanner(file); // 使用传入的file参数
        while(input.hasNextInt()) {
            sum += input.nextInt();
        }
        input.close();
        return sum;
    }
}

额外说明

如果要处理你假设的文本内容11 3 6 9 10 7,只需要把写入随机数的循环代码替换成pw.print("11 3 6 9 10 7 ");,核心的读写顺序和缓冲区处理逻辑保持不变即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:17:37