Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java I';我仍然不明白为什么这个程序没有';i don’我不能产生我所期望的结果_Java_Java.util.scanner_Inputstream_Filewriter_Printwriter - Fatal编程技术网

Java I';我仍然不明白为什么这个程序没有';i don’我不能产生我所期望的结果

Java I';我仍然不明白为什么这个程序没有';i don’我不能产生我所期望的结果,java,java.util.scanner,inputstream,filewriter,printwriter,Java,Java.util.scanner,Inputstream,Filewriter,Printwriter,我仍然不明白为什么这个程序不能计算并给出我认为会得到的结果 我试图使用PrintWriter类的一个实例将用户在for循环中指定的几个浮点值写入一个名为Numbers.txt的文本文件 然后我创建了Scanner类的一个对象inputFile,并使用hasNext方法在while循环中读取这些值,在该循环中计算这些值,并将结果分配给total变量;累加器初始化为0.0 尽管如此,total变量的值仍然是0.0,而不是文件中那些浮点值的累加 我是Java和编程的新手,所以请有人帮我确定哪里出了问题

我仍然不明白为什么这个程序不能计算并给出我认为会得到的结果

我试图使用PrintWriter类的一个实例将用户在for循环中指定的几个浮点值写入一个名为Numbers.txt的文本文件

然后我创建了Scanner类的一个对象inputFile,并使用hasNext方法在while循环中读取这些值,在该循环中计算这些值,并将结果分配给total变量;累加器初始化为0.0

尽管如此,total变量的值仍然是0.0,而不是文件中那些浮点值的累加

我是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);
  }}
公共类文件{
公共静态void main(字符串[]args)引发IOException{
double individualValues,total=0.0;//total是一个累加器,用于存储Numbers.txt中指定的值之和,因此必须将其初始化为0.0
int数值;
扫描仪kb=新扫描仪(System.in);
System.out.print(“输入文件名:”);
字符串文件名=kb.nextLine();
System.out.print(“在文件中输入浮点值的数目:”;
numberOfValues=kb.nextInt();
PrintWriter outputFile=新的PrintWriter(文件名);

对于(int i=1;i,您似乎正在尝试从System.in读取一些值,将它们写入一个文件,然后读取该文件并添加数字

但是,由于直到程序结束后才关闭正在编写的文件,因此无法确保在读取文件时文件内容已刷新到文件中。因此,您可能会
inputFile.hasNext()
始终返回false

只需将代码中的行
outputFile.close();
向上移动,这样就可以在新文件上创建扫描仪之前完成,这样您就应该很好了! 文件将被写入,然后您可以打开它进行读取


进一步解释这是因为调用println时,
PrintWriter
不会自动刷新其输出。出于性能原因,它会保留在缓冲区中。还有其他构造函数采用自动刷新布尔值。如果设置为true,它将刷新写入文件的值。通过调用close,则为flushing任何等待写入的内容,然后将此打开文件上的所有资源前置。

您期望的输出是什么,实际输出是什么?(以及产生该输出的输入是什么?)Hi Radiodef,我期望的输出是用户指定的浮点值的累加。因此,例如,如果提示用户分别输入2个值,4.5和3.2。那么在Numbers.txt中累加的总值将是7.7是的,这正是我试图对程序所做的。顺便说一句,非常感谢,因为我按照你的建议做了,它成功了!我把outputFile.close()语句移到了代码的上面,所以它被放在for循环和File File File=new File(fileName)之间。你能进一步解释一下为什么这种方法有效吗?不幸的是,我仍然对此感到困惑。