odczyt pliku tekstowego

0

Jak odczytać plik tekstowy w nastepującym formacie:
1 10,810403 -4,469180 5 0,220860
2 10,465196 3,625154 15 0,478342
3 11,590392 2,696334 60 0,523788
4 13,090248 -0,050137 37 0,899335
...
a następnie dla kazdej kolumny oprócz pierwszej obliczyć średnią wartość?

2

Jeśli elementy będą oddzielone spacjami tak jak u Ciebie to możesz je zesplitować lub wczytywać kolejno każdy element z danej linijki scannerem. Możesz wrzucić do listy, zsumować każdą kolumnę a na końcu każdy element kolumny podzielić przez ilość linijek:

public class Averager {
    public static void main(String[] args)
            throws Exception
    {
        ArrayList<BigDecimal> sums = new ArrayList<BigDecimal>();

        Scanner sc_file = new Scanner(new File("file.txt"));
        int lines =0;

        while (sc_file.hasNextLine()) {
            Scanner sc_line = new Scanner(sc_file.nextLine());

            int column = 0;
            lines++;
            while (sc_line.hasNext()) {
                if (column >= sums.size()) {
                    sums.add(new BigDecimal(0));
                }
                sums.set(column, sums.get(column).add(sc_line.nextBigDecimal()));
                column++;
            }
        }

        int allLines = lines;
        List<BigDecimal> averages = sums.stream().map(num -> num = num.divide(BigDecimal.valueOf(allLines), 5, RoundingMode.CEILING)).collect(Collectors.toList());

        System.out.println(averages);
    }
}

Dla danych z file.txt:

1 10,810403 -4,469180 5 0,220860
2 10,465196 3,625154 15 0,478342
3 11,590392 2,696334 60 0,523788
4 13,090248 -0,050137 37 0,899335

Wynik to:

[2.50000, 11.48906, 0.45055, 29.25000, 0.53059]

Na pewno da się to zrobić efektywniej, machnąłem to na szybko przed wyjściem na miasto

1 użytkowników online, w tym zalogowanych: 0, gości: 1