如何在文件编写器中合并方法

时间:2019-04-09 15:08:05

标签: java file methods

我遇到了我的一项家庭作业问题,我认为我已经完成了所有工作,直到最后一部分是调用方法并将该方法写入输出文件。这是作业:

  

编写一个方法isPrime,该方法接受一个数字并确定是否   数字是素数还是不是素数。它返回一个布尔值。

     

编写一个主要方法,要求用户输入包含以下内容的输入文件   数字和一个输出文件名,它将在其中写入质数   至。

     

Main打开输入文件,并在每个数字上调用isPrime。主要   将质数写入输出文件。

     

修改main以抛出适当的异常以进行处理   文件。

我尝试了几种不同的方法来用输出文件编写该方法,但是我不确定该怎么做。

 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 inputfile = keyboard.nextLine();
    File f = new File(inputfile);
    System.out.println("What is the name of the output file?");
    String outputfile = keyboard.nextLine();
    Scanner inputFile = new Scanner(f);
    FileWriter fw = new FileWriter(outputfile);
    PrintWriter pw = new PrintWriter(new File(outputfile));
    while (inputFile.hasNextLine()) {
       pw.write(inputFile.nextLine().isPrime());
       pw.write(System.lineSeparator());
    }
    pw.close();
    inputFile.close();       
}

public static void isPrime (int num) throws IOException {
    boolean flag = false;
    for (int i =2; i <= num/2; i++) {
        if (num % i ==0) {
            flag = true;
            break;
        }
    }
    if (!flag) 
        System.out.println(num + "is a prime number");
    else 
        System.out.println(num + "is not a prime number");
}

我需要程序能够读取其他数字的输入文件,然后将这些数字中的哪一个作为质数写到输出文件中。

1 个答案:

答案 0 :(得分:1)

您编写了“ inputFile.nextLine()。isPrime()”。但是inputFile.nextLine()会给您返回一个String。您无法在String上调用isPrime()方法,因此会出现编译错误。 您必须首先将其转换为整数,将其传递给您的方法,然后处理结果:

isPrime(Integer.parseInt(inputFile.nextLine()));

我建议您只从方法isPrime()返回一个消息字符串,而不是void,然后就可以正确处理它:

pw.write(isPrime(Integer.parseInt(inputFile.nextLine())));

附录: 我修改了您的代码,以便您可以看到在何处添加建议的行。我也省去了不必要的行。

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 inputfile = keyboard.nextLine();
    File f = new File(inputfile);
    System.out.println("What is the name of the output file?");
    String outputfile = keyboard.nextLine();
    Scanner inputFile = new Scanner(f);
    PrintWriter pw = new PrintWriter(new File(outputfile));
    while (inputFile.hasNextLine()) {
        String nextLine = inputFile.nextLine();
        boolean isPrime = isPrime(Integer.parseInt(nextLine));
        if (isPrime) {
           pw.write(nextLine + System.lineSeparator());
        }
    }
    pw.close();
    inputFile.close();       
}

public boolean isPrime (int num) {
    for (int i = 2; i <= num / 2; i++) {
        if (num % i == 0) {
            return false;
        }
    }
    return true;
}

TODO:将打开文件的代码放入try-catch-finally块中,并将close()命令放入其finally块中。 (如果您不知道为什么它最终应该放在里面,请询问)