找出输入文本文件的最小,最大和总计,然后将其写入新的输出文本文件?

时间:2018-10-27 07:03:02

标签: java file printwriter

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文件的文件中。 / p>

output.txt:

Min:

Max:

Total:

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

我不确定自己在做什么错,有人可以帮我吗?

我在第44行收到此错误:output.write(max, min, sum);
线程“主”中的异常java.lang.Error:未解决的编译问题:     类型为PrintWriter的方法write(char [],int,int)不适用于参数(int,int,int)

  

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

3 个答案:

答案 0 :(得分:1)

有两个问题:

  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循环需要 进行了如下调整:

    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存储双精度值。因此,将所有int声明为 双。 (也不确定为什么要使用 numberCount ,可以将其删除。)

    double currentNumber, sum = 0, numberCount = 0, min = 0, max = 0;
    

答案 1 :(得分:0)

使用printf代替write:

const test = {};
test[2] = 'value2';
test[1] = 'value1';
test[4] = 'value4';

var r = Object.keys(test).sort().reverse()
console.log(r);

var sorted ={}

//look like JS Sorted this ASC

  r.forEach(k => {
        sorted[k] = test[k]
    });

console.log(JSON.stringify(sorted));

// So use Array

var sorted =[]


  r.forEach(k => {
        sorted.push({"key":k ,"value": test[k]})
    });

console.log(JSON.stringify(sorted));

答案 2 :(得分:0)

如果您可以使用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定义了与文件一起使用的类和方法,这些文件也可以处理文件closing(资源)。

Stream-API具有用于处理元素的类和方法。要计算双打(DoubleStream)流的总和,最大值和最小值,我们可以使用方法DoubleStream.summaryStatistics()

如果您不能使用Java 9,请使用Arrays.asList()代替List.of()