Найти минимальное, максимальное, общее количество входного текстового файла и записать его в новый выходной текстовый файл? - PullRequest
0 голосов
/ 27 октября 2018
package file_handling;

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

public class WriteToFile {
public static void main(String[] args) {

      int currentNumber, sum = 0, numberCount=0;
      FileReader infile; 

      Scanner input = new Scanner(System.in);
      File file2 = new File("D:/test1.txt");
      input = new Scanner(file2);
        int min;
        int max;
      while (input.hasNextInt()){
        currentNumber = input.nextInt();
        sum+=currentNumber;

        numberCount++;
        if(currentNumber < min) {
            min= currentNumber;
        }
        if(currentNumber > max) {
            max = currentNumber; 
        }
      }

      System.out.println("Min: " + min);

      System.out.println("Max: " + max);

      System.out.println("Total: " + sum);

    File file1 = new File("D:/test.txt");
    try {
        PrintWriter output = new PrintWriter(file1);
        output.write(max, min, sum);
        output.close(); //don't forget this method 
    } catch (FileNotFoundException e) {
        System.out.println(e.getMessage());
    }

}

}

input.txt:

9.22

11.55

-2.21

16.95

22.11

-5.11

Основываясь на содержимом input.txt, я пытаюсь написать программу для определения максимального числа, минимального числа и суммыэти цифры и запишите результаты в файл с именем output.txt file.

output.txt:

Min:

Max:

Total:

Я должен использовать класс Scanner для чтения из файла и класс PrintWriterзаписать в файл.

Я не уверен, что я делаю не так, может кто-нибудь помочь мне, пожалуйста?

Я получаю эту ошибку в строке 44: output.write(max, min, sum);
Исключение в потоке "main" java.lang.Error: Неразрешенная проблема компиляции: метод write (char [], int, int) в типе PrintWriter не применим для аргументов (int, int, int)

at file_handling.WriteToFile.main (WriteToFile.java:44)

Ответы [ 3 ]

0 голосов
/ 27 октября 2018

Есть несколько проблем:

  1. Ваш код не будет компилироваться, так как нет метода PrintWriter это занимает (int, int, int). Вы можете использовать метод write(String s) для достижения того же.

    output.write(String.valueOf("Min: " + min + "\n\nMax: " + max + "\n\nTotal : " + sum));
    
  2. Файл читается как последовательность байтов, поэтому вам нужно использовать input.hasNextLine() чтобы прочитать каждую строку. С вашим текущим кодом цикл while не выполняется. Далее вам нужно будет преобразовать каждую String в Double . Так что ваш цикл должен настроено как показано ниже:

    while (input.hasNextLine()) {
        String currLine = input.nextLine(); 
    
        // check for empty spaces
        if (currLine != null && currLine.trim().length() > 0) {
            currentNumber = Double.parseDouble(currLine); 
    
            // same from here
            sum += currentNumber;
            numberCount++;
            if (currentNumber < min) {
                min = currentNumber;
            }
            if (currentNumber > max) {
                max = currentNumber;
            }       
        }
    }
    
  3. Вы не можете использовать int для хранения двойных значений. Так что объявите все свои инт двойной. (Также не уверен, почему вы используете numberCount , его можно удалить.)

    double currentNumber, sum = 0, numberCount = 0, min = 0, max = 0;
    
0 голосов
/ 27 октября 2018

Если вы можете использовать Java 8 или Java 9, вы можете написать более короткий и простой код:

  public static void main(String[] args) throws IOException {
    DoubleSummaryStatistics statistics = Files
      .lines(new File("./test1.txt").toPath())
      .filter(l -> !l.isEmpty())
      .mapToDouble(Double::parseDouble)
      .summaryStatistics();

    double min = statistics.getMin();
    System.out.println("Min: " + min);
    double max = statistics.getMax();
    System.out.println("Max: " + max);
    double sum = statistics.getSum();
    System.out.println("Total: " + sum);

    Files.write(new File("./test2.txt").toPath(), List.of(Double.toString(min), Double.toString(max), Double.toString(sum)));
  }

nio-API определяет классы и методы для работы с файлами, которые также обрабатывают закрытие файлов (ресурсов).

Stream-API имеет классы и методы для обработки элементов. Чтобы вычислить суммы, максимальные и минимальные значения для потока двойников (DoubleStream), мы можем использовать метод DoubleStream.summaryStatistics().

Если вы не можете использовать Java 9, используйте Arrays.asList() вместо List.of()

0 голосов
/ 27 октября 2018

Используйте printf вместо write:

output.printf("Max:  %d\n", max);
output.printf("Min:  %d\n", min);
output.printf("Total:  %d\n", sum);
...