如何按指定方法计算文本文件中数字的和?代码问题修正
问题分析与修复方案
你的代码返回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
相关产品推荐
相关产品推荐

