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

Java程序调试:文本文件无输出及读取方法调用问题求助

问题分析与代码修正

你的代码存在多处关键问题,导致文件无内容输出、求和逻辑完全错误,下面是问题拆解和修复方案:

核心错误点

1. 文件写入方法printNum的问题

  • 写入内容错误:循环里写的是output.println(i),这是循环索引值,不是生成的随机double数值,应该写入values[i]
  • 未刷新/关闭输出流:PrintWriter依赖缓冲区,不调用close()或flush(),内容不会实际写入文件
  • 冗余操作:createNewFile()完全没必要,PrintWriter会自动创建不存在的文件

2. 文件读取求和方法sumNum的问题

  • Scanner初始化错误:new Scanner("Project1.txt")是把字符串本身当输入源,不是读取文件,应该传入File对象
  • 求和逻辑错误:循环累加的是索引i,不是从文件读取的数值
  • 格式化输出错误:printf的格式字符串和参数不匹配,正确格式应为"\nThe total is %.2f",参数只需传入sum
  • 缺少文件内容打印逻辑:没有按题目要求显示所有读取到的double数值

修复后的完整代码

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

public class Program2 {

    public static void main(String[] args) {
        double[] nums = new double[10];
        
        // 修正随机数范围:生成1到11之间的double(原代码是1到12)
        for (int i = 0; i < nums.length; i++) {
            nums[i] = 1 + Math.random() * 10;   
        }
    
        printNum(nums);
        sumNum(); // 无需传入原数组,直接读取文件即可

    }
    
    public static void printNum(double[] values) {
        // 使用try-with-resources自动关闭流,避免资源泄漏
        try (PrintWriter output = new PrintWriter(new File("Project1.txt"))) {
            for (double num : values) {
                output.println(num);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    
    public static void sumNum() {
        double sum = 0;
        // 读取文件并逐行处理
        try (Scanner input = new Scanner(new File("Project1.txt"))) {
            while (input.hasNextDouble()) {
                double num = input.nextDouble();
                System.out.println(num);
                sum += num;
            }
            // 格式化输出总和
            System.out.printf("\nThe total is %.2f", sum);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

额外说明

  • 原随机数生成逻辑1 + Math.random() * 11会产生1到12的数值,不符合题目1到11的要求,已修正为1 + Math.random() * 10
  • try-with-resources语法会自动关闭流,比手动调用close()更安全,避免资源泄漏
  • sumNum方法无需依赖原数组,直接读取文件内容即可,完全符合题目“读取文本文件计算总和”的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:00:45