我仍然不知道为什么该程序不计算并给出我认为会的结果。
我正在尝试使用PrintWriter类的实例将用户在for循环中指定的多个浮点值写入用户命名为Numbers.txt的文本文件。
然后,我创建了Scanner类的对象inputFile,并使用hasNext方法在while循环中读取这些值,在其中计算它们并将结果分配给total变量;初始化为0.0的累加器。
尽管如此,总变量的值仍为0.0,而不是文件中那些浮点值的累积。
我是Java的新手,尤其是Java的新手,因此请有人帮助我确定错误的地方以及如何修复它,以获得所需的结果。
提前谢谢!以下是我编写的代码部分:
public class FileSum {
public static void main(String[] args) throws IOException {
double individualValues, total = 0.0; // total is an accumulator to store the sum of the values specified in Numbers.txt, thus it must be initialized to 0.0
int numberOfValues;
Scanner kb = new Scanner(System.in);
System.out.print("enter the file name: ");
String fileName = kb.nextLine();
System.out.print("enter the number of floating-point values in the file: ");
numberOfValues = kb.nextInt();
PrintWriter outputFile = new PrintWriter(fileName);
for(int i = 1; i <= numberOfValues; i++) {
System.out.print("the floating-point value number " + i + ": ");
individualValues = kb.nextDouble();
outputFile.println(individualValues);
}
File file = new File(fileName);
Scanner inputFile = new Scanner(file);
while(inputFile.hasNext()) {
individualValues = inputFile.nextDouble();
total = total + individualValues;
}
inputFile.close();
outputFile.close();
kb.close();
System.out.println("the total values in Numbers.txt: " + total);
}}
这是程序输出:
输入文件名:Numbers.txt
输入文件中的浮点值的数量:2
浮点数1:4.5
浮点数2:3.2
Numbers.txt中的总值:0.0
答案 0 :(得分:1)
您似乎正在尝试从System.in读取一些值,将它们写入文件,然后读取该文件并添加数字。
但是,由于要等到程序结束时才关闭正在写入的文件,所以无法确定在读取文件时文件内容已刷新到文件中。因此,您很可能inputFile.hasNext()
总是返回false
只需在代码中向上移动outputFile.close();
行,这样就可以在新文件上创建扫描程序之前就可以了!
文件将被写入,然后您可以将其打开以进行读取。
进一步的解释这是由于PrintWriter
在调用println时未自动刷新其输出。由于性能原因,它留在缓冲区中。还有其他采用autoFlush布尔值的构造函数。如果设置为true,它将刷新您写入文件的值。通过调用close,您将刷新所有等待写入的内容,然后预备占用此打开文件上所有的资源。