这是我运行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");
}
}
答案 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>