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
相关产品推荐
相关产品推荐

