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ść?
0
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