Cześć, z godnie z sugestią zakładam nowy temat i nie męczę już tamtego. ;) Mam problem w tym zadaniu:
-
Napisz program przy użyciu listy ArrayList zawierającej kilkanaście ocen z przedmiotu Informatyka w liceum.
-
Wypełnij listę przykładowymi ocenami.**
-
Następnie przy pomocy pętli for oblicz średnią ocenę ucznia (średnia arytmetyczna), ale w taki sposób, że pominięte zostaną skrajne
oceny – JEDNA najmniejsza i JEDNA największa.
Oceny największą i najmniejszą należy odnaleźć. Przykładowo, dla ocen:a) 3,3,4,4,4,5,5,5,6 – do obliczenia średniej wzięte zostaną oceny: 3,4,4,4,5,5,5
b) 4,4,4,4,4,4,4 – do obliczenia średniej wzięte zostaną oceny: 4,4,4,4,4
I teraz użyłem Collections.sort();
i ładnie mi posortowało, później w klasie Average napisałem instrukcję, że jeśli ocena z indeksem 0 jest jest mniejsza bądź równa ocenie z indeksem 1 && ocena z indeksem 8 jest jest mniejsza bądź równa ocenie z indeksem 9, to niech odejmie od sumy licznika ocenę z indeksem 0 i 9.
package com;
import java.util.*;
public class Main {
public static void main(String[] args) {
System.out.println("Zadanie 1");
List<Integer> list = new ArrayList<>();
RateList rateList = new RateList(list);
rateList.rateListGenerator();
rateList.sortRateList();
Average average = new Average(list);
System.out.println(String.format("Średnia z wszystkich ocen: %,.2f", average.countAverage()));
System.out.println("\nZadanie 2");
Books bookList = new Books();
bookList.printPositions();
}
}
class RateList {
private Random random = new Random();
private List<Integer> rateList;
public RateList(List<Integer> rateList) {
this.rateList = rateList;
}
public List<Integer> rateListGenerator() {
for (int i = 0; i < 10; i++) {
int rateGenerator = random.nextInt(6) + 1;
rateList.add(i, rateGenerator);
}
for (Integer item : rateList) {
System.out.println("Ocena: " + item);
}
return rateList;
}
public List<Integer> sortRateList() {
Collections.sort(rateList);
for (Integer item : rateList) {
System.out.println("Posortowana lista ocen: " + item);
}
System.out.println("Rozmiar listy: " + rateList.size());
return rateList;
}
}
class Average {
private List<Integer> rateList;
public Average(List<Integer> rateList) {
this.rateList = rateList;
}
public float countAverage() {
int sum = 0;
if (rateList.get(0) <= rateList.get(1) && rateList.get(8) <= rateList.get(9)) {
for (int i = 0; i < rateList.size(); i++) {
sum = sum + rateList.get(i);
}
sum = sum - rateList.get(0) - rateList.get(9);
}
else {
for (int i = 0; i < rateList.size(); i++) {
sum = sum + rateList.get(i);
}
}
System.out.println("Suma licznika po odjęciu oceny pierwszej i ostatniej: " + sum);
return (float) sum / (float) rateList.size();
}
}
Wszystko działa, ale mentor ma "ale" i chce, żeby najmniejszą i największą liczbę odnaleźć bez sortowania, macie jakieś pomysły? :)