Java作业求助:如何在FileWriter中整合isPrime方法实现素数写入?
嘿,我帮你梳理下代码里的问题,主要是几个关键细节没贴合作业要求,导致素数判断结果没法正常写入文件:
核心问题分析
1. isPrime 方法不符合需求
- 作业明确要求返回布尔值,但你写的是
void类型,而且方法内部直接打印结果,没法让main方法拿到判断值去写入文件。 - 方法声明里的
throws IOException完全没必要——素数判断逻辑和文件操作无关。 - 没处理
num <= 1的特殊情况(小于2的数都不是素数),循环范围也可以优化成到sqrt(num),比num/2更高效。
2. main 方法里的逻辑错误
- 重复创建了
FileWriter和PrintWriter,属于冗余操作。 - 读取输入文件的行后,直接调用
inputFile.nextLine().isPrime()是完全错误的:String类根本没有这个方法,你得先把字符串转成int类型,再传给isPrime。 - 写入文件的逻辑不对,你需要把数字和判断结果组合成可读的字符串,而不是直接写入布尔值(而且原代码的调用方式本身就会编译报错)。
修正后的完整代码
import java.io.*; import java.util.Scanner; public class PrimeChecker { public static void main(String[] args) throws IOException { Scanner keyboard = new Scanner(System.in); System.out.println("What is the name of the input file?"); String inputFileName = keyboard.nextLine(); File inputFile = new File(inputFileName); System.out.println("What is the name of the output file?"); String outputFileName = keyboard.nextLine(); // 用try-with-resources自动管理资源,避免手动关闭遗漏或异常时未关闭的问题 try (Scanner fileScanner = new Scanner(inputFile); PrintWriter printWriter = new PrintWriter(new FileWriter(outputFileName))) { while (fileScanner.hasNextLine()) { String line = fileScanner.nextLine().trim(); // 跳过空行(可选,让程序更健壮) if (line.isEmpty()) { continue; } try { int num = Integer.parseInt(line); boolean primeResult = isPrime(num); // 组合成清晰的结果字符串写入文件 printWriter.println(num + " is " + (primeResult ? "" : "not ") + "a prime number"); } catch (NumberFormatException e) { // 处理输入文件中非数字的行(可选,避免程序崩溃) printWriter.println("Invalid input: " + line); } } } keyboard.close(); } // 符合作业要求:接收int,返回布尔值的素数判断方法 public static boolean isPrime(int num) { // 处理小于2的特殊情况 if (num <= 1) { return false; } // 优化循环范围:判断到sqrt(num)即可 for (int i = 2; i <= Math.sqrt(num); i++) { if (num % i == 0) { return false; } } return true; } }
关键修改说明
- 重构
isPrime方法:改成返回boolean类型,去掉冗余的异常声明,补充特殊值判断,优化循环效率。 - 修复类型转换:把输入文件的字符串行转成
int后,再传给isPrime方法。 - 优化资源管理:用
try-with-resources自动关闭文件流,比手动close更安全规范。 - 调整写入逻辑:把数字和判断结果组合成友好的字符串(比如
"7 is a prime number")写入输出文件,符合作业要求。
内容的提问来源于stack exchange,提问作者Nitro
相关产品推荐
相关产品推荐

