【问题标题】:Java Average From File来自文件的 Java 平均值
【发布时间】:2016-01-01 21:43:33
【问题描述】:

我正在尝试做一个简单的程序来查找文本文档中一系列数字的平均值,我已经完成了大部分操作,但是在我的 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;
}`

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

【问题讨论】:

  • 您没有在 while 循环中增加 i
  • Atri 是对的。将int i = 0; 向上移动到while 循环之外,并将i++; 放在循环的底部。否则,您只需一遍又一遍地写入数组的第一个元素。

标签: java file loops


【解决方案1】:

average(allNums); 排除在循环之外。 是的,您需要增加 i

考虑同时删除icountLines,并使用ArrayList 代替数组。

【讨论】:

    【解决方案2】:

    更改您的代码:

    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); 行保留在循环内。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-16
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      相关资源
      最近更新 更多