繁体   English   中英

Java文件输入标准差未计算

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM