为什么我在运行程序时遇到此错误,即使我没有编译错误?

时间:2016-11-20 22:04:23

标签: java

这是我运行StatsDemo时出现的错误。该程序应该没有输出到控制台,但运行该程序将创建一个名为Results.txt的文件与您的输出。此时你应该得到的结果是:你的平均值应该是77.444,标准差是10.021。

运行StatsDemo。

此程序计算包含一系列数字的文件的统计信息

输入文件名:[DrJava输入框]

  

java.util.NoSuchElementException:找不到行        在java.util.Scanner.nextLine(Scanner.java:1540)
       在StatsDemo.main(StatsDemo.java:34)        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
       在java.lang.reflect.Method.invoke(Method.java:498)
       在edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)

以下是代码:

import java.text.DecimalFormat; //for number formatting
import java.util.Scanner;  //for keyboard input
import java.io.*;  //for using files

public class StatsDemo
{
    public static void main(String [] args)throws IOException {

        double sum = 0;  //the sum of the numbers
        int count = 0;  //the number of numbers added
        double mean = 0;   //the average of the numbers
        double stdDev = 0; //the standard deviation of the numbers
        String line;  //a line from the file
        double difference; //difference between the value and the mean

         //create an object of type Decimal Format
         DecimalFormat threeDecimals = new DecimalFormat("0.000");
         //create an object of type Scanner
         Scanner keyboard = new Scanner (System.in);
         String filename; // the user input file name

         //Prompt the user and read in the file name
         System.out.println("This program calculates statistics"
           + " on a file containing a series of numbers");
         System.out.print("Enter the file name:  ");
         filename = keyboard.nextLine();

         //ADD LINES FOR TASK #4 HERE
         File rf = new File("Numbers.txt"); 
         Scanner inputFile = new Scanner(rf); 

         while (inputFile.hasNextDouble()) 
         {   
             sum += inputFile.nextDouble(); 
             count ++; 
             inputFile.nextLine(); 
         }
         inputFile.close();
         mean = sum/count; 

         //ADD LINES FOR TASK #5 HERE
         File rf2 = new File("Numbers.txt"); 
         Scanner inputFile2 = new Scanner(rf2);
         sum = 0; 
         count = 0; 
         //priming read to read the first line of the file

         while (inputFile.hasNext()) 
         {
             difference = inputFile.nextDouble() - mean; 
             sum += Math.pow(difference,2);
             count++; 
             if (inputFile.hasNextDouble())
                inputFile.nextLine(); 
         }
         inputFile.close(); 
         stdDev = Math.sqrt(sum/count); 

         //ADD LINES FOR TASK #3 HERE
         FileWriter fwriter = new FileWriter("Numbers.txt", true);
         PrintWriter outputFile = new PrintWriter(fwriter);
         outputFile.print("mean = " + mean);
         outputFile.print("deviation = " + stdDev);
         outputFile.close();
         System.out.println("Data written to file");
    }
}

1 个答案:

答案 0 :(得分:0)

您的错误似乎来自这一行:

inputFile.nextLine(); 

我猜你的输入文件Numbers.txt没有超出你当前阅读点的换行符。

这是循环:

        while (inputFile.hasNext()) 
        {
         difference = inputFile.nextDouble() - mean; 
            sum += Math.pow(difference,2);
            count++; 
            if (inputFile.hasNextDouble())
            inputFile.nextLine(); 
        }
默认情况下,

.hasNext()会查找任何空格,而不仅仅是行,因此您可以输入此循环,而不会有新行。如果您不了解如何修复此循环,您应该为我们澄清Numbers.txt的格式是什么。

当你读到这个循环内部.nextDouble()时,你可能已经在最后一个元素,所以如果例如文件中的最后一个双重后面没有换行符,那么这个循环将失败。 / p>