Java文件输入标准偏差不计算

时间:2015-10-18 22:53:24

标签: java file io

我遇到了一个文件输入程序的问题,该程序应该明确地找到文件中所有数字的标准输入。但是,程序不会导入数字,而是为std dev和与之关联的所有变量返回0。

代码:     import java.io. *;     import 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);
}

}

2 个答案:

答案 0 :(得分:0)

在你的第二个for循环中,你正在检查inputFile.hasNext(),你已经知道它是假的,因为它是你第一次循环的守卫条件。

如果您想在两个单独的循环中执行此操作,则需要关闭并重新打开该文件。

但是,您可以在单个for循环中计算标准差,这是可取的,因为它避免了两次执行相同的IO。通过扩展(n - avg)^2表达式并重新排列求和来直接推导出该方法,或者您可以在您选择的搜索引擎中查找“标准偏差单遍”。

答案 1 :(得分:0)

您需要关闭并重新加载文件。这是因为当你执行.nextDouble()时,它会从缓冲区中删除它并丢失该值。

所以

 inputFile.close();
 inputFile = null;
 inputFile = new new Scanner(file);