我遇到了一个文件输入程序的问题,该程序应该明确地找到文件中所有数字的标准输入。但是,程序不会导入数字,而是为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);
}
}
答案 0 :(得分:0)
在你的第二个for循环中,你正在检查inputFile.hasNext()
,你已经知道它是假的,因为它是你第一次循环的守卫条件。
如果您想在两个单独的循环中执行此操作,则需要关闭并重新打开该文件。
但是,您可以在单个for循环中计算标准差,这是可取的,因为它避免了两次执行相同的IO。通过扩展(n - avg)^2
表达式并重新排列求和来直接推导出该方法,或者您可以在您选择的搜索引擎中查找“标准偏差单遍”。
答案 1 :(得分:0)
您需要关闭并重新加载文件。这是因为当你执行.nextDouble()时,它会从缓冲区中删除它并丢失该值。
所以
inputFile.close();
inputFile = null;
inputFile = new new Scanner(file);