猿问

找出输入文本文件的最小值、最大值、总数并将其写入新的输出文本文件?

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());

    }


}


}

输入.txt:


9.22


11.55


-2.21


16.95


22.11


-5.11

根据 input.txt 的内容,我试图编写一个程序来找出最大数量、最小数量和这些数字的总和,并将结果写入一个名为 output.txt 的文件中。


输出.txt:


Min:


Max:


Total:

我必须使用 Scanner 类从文件中读取,并使用 PrintWriter 类写出到文件。


我不确定我做错了什么,有人可以帮助我吗?


我在第 44 行收到此错误:output.write(max, min, sum);

线程“main”java.lang.Error 中的异常:未解决的编译问题:PrintWriter 类型中的方法 write(char[], int, int) 不适用于参数 (int, int , 整数)


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


动漫人物
浏览 189回答 3
3回答

慕容森

有几个问题:您的代码将无法编译,因为没有方法PrintWriter 将(int, int, int). 您可以使用该方法 write(String s)来实现相同的目的。output.write(String.valueOf("Min: " + min + "\n\nMax: " + max + "\n\nTotal : " + sum));该文件作为字节序列读取,因此您需要使用 input.hasNextLine()读取每一行。使用您当前的代码,您的 while 循环不会被执行。接下来,您需要将每个String转换为Double。所以你的while循环需要调整为如下:while (input.hasNextLine()) {&nbsp; &nbsp; String currLine = input.nextLine();&nbsp;&nbsp; &nbsp; // check for empty spaces&nbsp; &nbsp; if (currLine != null && currLine.trim().length() > 0) {&nbsp; &nbsp; &nbsp; &nbsp; currentNumber = Double.parseDouble(currLine);&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; // same from here&nbsp; &nbsp; &nbsp; &nbsp; sum += currentNumber;&nbsp; &nbsp; &nbsp; &nbsp; numberCount++;&nbsp; &nbsp; &nbsp; &nbsp; if (currentNumber < min) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; min = currentNumber;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; if (currentNumber > max) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; max = currentNumber;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; }}您不能使用 int 来存储双精度值。因此,将所有 int 声明为双倍。(也不知道你为什么使用numberCount,它可以被删除。)double currentNumber, sum = 0, numberCount = 0, min = 0, max = 0;

萧十郎

如果您可以使用 Java 8 或 Java 9,您可以编写更短更简单的代码:&nbsp; public static void main(String[] args) throws IOException {&nbsp; &nbsp; DoubleSummaryStatistics statistics = Files&nbsp; &nbsp; &nbsp; .lines(new File("./test1.txt").toPath())&nbsp; &nbsp; &nbsp; .filter(l -> !l.isEmpty())&nbsp; &nbsp; &nbsp; .mapToDouble(Double::parseDouble)&nbsp; &nbsp; &nbsp; .summaryStatistics();&nbsp; &nbsp; double min = statistics.getMin();&nbsp; &nbsp; System.out.println("Min: " + min);&nbsp; &nbsp; double max = statistics.getMax();&nbsp; &nbsp; System.out.println("Max: " + max);&nbsp; &nbsp; double sum = statistics.getSum();&nbsp; &nbsp; System.out.println("Total: " + sum);&nbsp; &nbsp; Files.write(new File("./test2.txt").toPath(), List.of(Double.toString(min), Double.toString(max), Double.toString(sum)));&nbsp; }该NIO的API定义了文件,也可以用来处理类和方法,工程结束文件(资源)。所述流-API具有的类和方法来处理元素。要计算双精度流 ( DoubleStream)的总和、最大值和最小值,我们可以使用 方法DoubleStream.summaryStatistics()。如果您不能使用 Java 9,请使用Arrays.asList()代替List.of()

撒科打诨

使用 printf 而不是写:output.printf("Max:&nbsp; %d\n", max);output.printf("Min:&nbsp; %d\n", min);output.printf("Total:&nbsp; %d\n", sum);
随时随地看视频慕课网APP

相关分类

Java
我要回答