[英]Java file input Standard Deviation not calculating
我在使用文件输入程序时遇到了麻烦,该程序应该显式地找到文件上所有数字的std dev。 但是,该程序未导入数字,并且为std dev及其关联的所有变量返回0。
代码:import java.io. *; 导入java.util.Scanner;
public class File_io_practice {
public static void main(String[] args) throws IOException {
double avg;
double median;
double stdDev;
double stdDevSum = 0.0;
double stdDevLastSum = 0.0;
double n = 0;
double n1 = 0.0;
double sum = 0.0;
double lastSum = 0.0;
double temp;
int i;
int j;
File file = new File("File.txt");
Scanner inputFile = new Scanner(file);
for(i = 0; inputFile.hasNext(); i++){
n = inputFile.nextDouble();
sum = lastSum + n;
lastSum = sum;
}
avg = lastSum / i;
for(j = 0; inputFile.hasNext(); j++){
n = inputFile.nextDouble();
stdDevSum = ((n - avg) * (n - avg)) + stdDevLastSum;
stdDevLastSum = stdDevSum;
}
temp = stdDevLastSum / (i - 1);
stdDev = Math.sqrt(temp);
System.out.print(stdDev);
}
}
在第二个for循环中,您正在检查inputFile.hasNext()
,您已经知道它为假,因为这是第一个for循环的保护条件。
如果要在两个单独的循环中执行此操作,则需要关闭并重新打开文件。
但是,您可以在一个for循环中计算标准偏差,这是合乎需要的,因为它避免了两次相同的IO。 通过扩展(n - avg)^2
表达式并重新排列总和可以直接得出该方法,也可以在您选择的搜索引擎中查找“标准差单程”。
您需要关闭并重新存放文件。 这是因为当您执行.nextDouble()时,会将其从缓冲区中删除,并且您丢失了该值。
也是
inputFile.close();
inputFile = null;
inputFile = new new Scanner(file);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.