Java平均值来自文件

时间:2016-01-01 21:43:33

标签: java file loops

我正在尝试使用一个简单的程序来查找文本文档中一系列数字的平均值,但是我已经将其中的大部分都删除了,但是我在while语句中写入同一个变量时遇到了问题。我的代码看起来像这样。

public static void processFile (String filename) throws IOException, FileNotFoundException {
    try (BufferedReader inputReader = new BufferedReader (new InputStreamReader(new FileInputStream("scores.txt")))) {
        String line;
        int lineNum = countLines("scores.txt");
        int [] allNums = new int [lineNum];
        while (( line = inputReader.readLine()) != null) {
           int i = 0;
           allNums[i] = Integer.parseInt(line);
           average(allNums);
           System.out.println(allNums[i]);

           }

         System.out.println(average(allNums));
    }
}
public static double average(int[] avg){
double sum = 0;
for (int i = 0; i < avg.length; i++) {
    sum = sum + avg[i];
}
return sum / avg.length;
}
`public static int countLines(String filename) throws IOException {
    int cnt;
    try (LineNumberReader reader = new LineNumberReader(new 
FileReader(filename))) {
        cnt = 0;
        String lineRead = "";
        while ((lineRead = reader.readLine()) != null) {}
        cnt = reader.getLineNumber();
        }
    return cnt;
}`

不是查找文件中数字的平均值,而是将最后一个数字写入数组,并将其除以文件中的数字。我查找了我的问题,但找不到有效的解决方案。另外我知道我的编码变得有点复杂和低效,特别是找到行数,但它是一个小文件,我希望它能让它更高效。

2 个答案:

答案 0 :(得分:1)

average(allNums);取出循环。 是的,您需要增加i

考虑全部删除icountLines,并使用ArrayList代替数组。

答案 1 :(得分:0)

更改您的代码:

while (( line = inputReader.readLine()) != null) {
           int i = 0;
           allNums[i] = Integer.parseInt(line);
           average(allNums);
           System.out.println(allNums[i]);
}

为:

int i = 0;   
while (( line = inputReader.readLine()) != null) {          
           allNums[i] = Integer.parseInt(line);           
           System.out.println(allNums[i]);
           i++;
}
average(allNums);

你需要:

  • 在循环外初始化i=0
  • 在循环内增加i
  • 如果您不希望在阅读每个数字时打印数字的平均值,请将average(allNums);移到循环外部。

看起来您想在阅读每个数字后打印平均值,在这种情况下,您可以将average(allNums);行保留在循环中。