使用Java中的文本文件查找数字的平均值

时间:2015-11-09 17:55:17

标签: java file average filereader

package txtfileaverage;

import java.io.*;
import java.util.Scanner;

/**
 *
 * @author Frazer
 */
public class Txtfile {

    public static void main(String args[])  throws IOException
     {
        Scanner file = new Scanner(new File("input.txt")); 

        int numTimes = file.nextInt();
        file.nextLine();

            for(int i = 0; i < numTimes; i++);
            {   
                int sum = 0;
                int count = 0;
              Scanner split = new Scanner(file.nextLine());
              while(split.hasNextInt())
                //for (int a = 0; a < 4 ; a++)
                {
        sum += split.nextInt();
        count++;
                }    
        System.out.println("the average is = " + ((double)sum / count));

            }
                }

}

文字档案:

4

100 100 100 100

100 100 50  50

100 90  80  70

60  50  40  30 

以上是我试图读取的文本文件,显示的输出是

“平均值是100”但它只是看一个数字或一行,有关如何让它读取其他行的任何提示?我已经看了一些教程,在比较代码之后,我正在努力找出为什么它只找到1个数字或1行的平均值而不是整行,每个都有另一个声明。

3 个答案:

答案 0 :(得分:1)

使用Java 8 Collectors.averagingInt,它就像:

一样简单
 Arrays.stream(Files.lines(Paths.get(ClassLoader.getSystemResource(
                    "input.txt").toURI())).reduce((a, b) -> a + " " + b)
.map(e -> e.split(" ")).get()).filter(e -> e.matches("\\d+"))
.map(Integer::new)
.collect(Collectors.averagingInt(Integer::intValue));

<强>用法:

import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.stream.Collectors;

public class FindAverage {

    public static void main(String[] args) throws IOException,
            URISyntaxException {

        Double average = Arrays
                .stream(Files
                        .lines(Paths.get(ClassLoader.getSystemResource(
                                "input.txt").toURI()))
                        .reduce((a, b) -> a + " " + b).map(e -> e.split(" "))
                        .get()).filter(e -> e.matches("\\d+"))
                .map(Integer::new)
                .collect(Collectors.averagingInt(Integer::intValue));

        System.out.println("Average = " + average);
    }
}

答案 1 :(得分:0)

这里的代码应该可行。我在这里做的是通过while循环逐行浏览文件。对于每一行,我按指定的分隔符空格分割部分。然后,我循环遍历元素trim(),删除多余的空格,抓取整数,并将其添加到sum。对于我采用的每个整数,我加上计数。最后它和你的一样。

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class Test {

    public static void main(String args[]) throws IOException {

        Scanner file = new Scanner(new File("input.txt"));

        String line = null;
        int sum = 0;
        int count = 0;
        while ((line = file.nextLine()) != null) {
            String[] vals = line.split(" ");
            for(int i = 0; i < vals.length; i++) {
                sum += Integer.valueOf(vals[i].trim());
                count++;
            }
        }
        System.out.println("the average is = " + ((double) sum / count));

    }

}

答案 2 :(得分:0)

这是从文本文件计算平均值的简单方法。只需在while循环中编写一条if语句。

See Code Here