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)
答案 0 :(得分:1)
有两个问题:
您的代码将无法编译,因为没有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()) {
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;
}
}
}
您不能使用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()