Java - zliczanie liczb w tablicy dla początkujących
Zadanie:
Mamy tablicę z ocenami uczniów i naszym zadaniem jest policzenie ile i jakich ocen dostali uczniowie.
Np mając tablicę z ocenami uczniów:
int[] ocenyUczniow = {3, 5, 4, 3, 5, 5};
W tej tablicy mamy:
- Zero ocen 1
- Zero ocen 2
- Dwie oceny 3 (index 0, 3)
- Jedna ocena 4 (index 2)
- Trzy oceny 5 (index 1, 4, 5)
Jak widzimy, klasa uczy się bardzo dobrze.
Efektem końcowym tego zadania jest wypisanie w ładnej formie ile i jakich ocen dostali uczniowie:
Twój program powinien wypisać w konsoli:
Zliczone oceny:
Liczba jedynek: 0
Liczba dwojek: 0
Liczba trojek: 2
Liczba czworek: 1
Liczba piatek: 3
Jeśli wiesz jak rozwiązać to zadanie, nie przechodź od razu do rozwiązania i spróbuj sam rozwiązać to zadanie.
Rozwiązanie:
public class ZliczanieLiczb {
public static void main(String[] args) {
int liczbaOcenJedynek = 0;
int liczbaOcenDwojek = 0;
int liczbaOcenTrojek = 0;
int liczbaOcenCzworek = 0;
int liczbaOcenPiatek = 0;
int[] ocenyUczniow = {3, 5, 4, 3, 5, 5};
for (int i = 0; i < ocenyUczniow.length; i++) {
int ocena = ocenyUczniow[i];
if (ocena == 1) {
liczbaOcenJedynek++;
}
if (ocena == 2) {
liczbaOcenDwojek++;
}
if (ocena == 3) {
liczbaOcenTrojek++;
}
if (ocena == 4) {
liczbaOcenCzworek++;
}
if (ocena == 5) {
liczbaOcenPiatek++;
}
}
System.out.println("Zliczone oceny:");
System.out.println("Liczba jedynek: " + liczbaOcenJedynek);
System.out.println("Liczba dwojek: " + liczbaOcenDwojek);
System.out.println("Liczba trojek: " + liczbaOcenTrojek);
System.out.println("Liczba czworek: " + liczbaOcenCzworek);
System.out.println("Liczba piatek: " + liczbaOcenPiatek);
}
}
Wynik:
Zliczone oceny:
Liczba jedynek: 0
Liczba dwojek: 0
Liczba trojek: 2
Liczba czworek: 1
Liczba piatek: 3
Zadanie 2
Zadanie drugie jest analogiczne do 1, tylko teraz sami musimy sobie wygenerować tablicę z ocenami. Użyć do tego powinniśmy losowych liczb z przedziału od 1 do 5. Wielkość tablicy powinna być taka sama jak w przykładzie 1 (aby sobie nie utrudniać życia odrazu). Jeśli program będzie działał prawidłowo to możemy zwiększyć tą liczbe (zwiększamy ilość uczniów w klasie :D) do np 1000.
Rozwiązanie zadania 2
import java.util.concurrent.ThreadLocalRandom;
public class ZliczanieLiczb2 {
public static void main(String[] args) {
int[] ocenyUczniow = new int[6];
for (int i = 0; i < ocenyUczniow.length; i++) {
ocenyUczniow[i] = nastepnaLosowaOcena();
}
int liczbaOcenJedynek = 0;
int liczbaOcenDwojek = 0;
int liczbaOcenTrojek = 0;
int liczbaOcenCzworek = 0;
int liczbaOcenPiatek = 0;
for (int i = 0; i < ocenyUczniow.length; i++) {
int ocena = ocenyUczniow[i];
if (ocena == 1) {
liczbaOcenJedynek++;
}
if (ocena == 2) {
liczbaOcenDwojek++;
}
if (ocena == 3) {
liczbaOcenTrojek++;
}
if (ocena == 4) {
liczbaOcenCzworek++;
}
if (ocena == 5) {
liczbaOcenPiatek++;
}
if (ocena < 1 || ocena > 5) {
throw new RuntimeException();
}
}
System.out.println("Zliczone oceny:");
System.out.println("Liczba jedynek: " + liczbaOcenJedynek);
System.out.println("Liczba dwojek: " + liczbaOcenDwojek);
System.out.println("Liczba trojek: " + liczbaOcenTrojek);
System.out.println("Liczba czworek: " + liczbaOcenCzworek);
System.out.println("Liczba piatek: " + liczbaOcenPiatek);
}
public static int nastepnaLosowaOcena() {
// 1 - włącznie - czyli 1 jest minimalną liczbą
// 6 - wyłącznie - czyli 5 jest maksymalną liczbą
return ThreadLocalRandom.current().nextInt(1, 6);
}
}
Wynik (pierwsze uruchomienie programu):
Zliczone oceny:
Liczba jedynek: 2
Liczba dwojek: 0
Liczba trojek: 1
Liczba czworek: 1
Liczba piatek: 2
Wynik (drugie uruchomienie programu):
Zliczone oceny:
Liczba jedynek: 3
Liczba dwojek: 0
Liczba trojek: 0
Liczba czworek: 2
Liczba piatek: 1
Wynik (trzecie uruchomienie programu):
Zliczone oceny:
Liczba jedynek: 1
Liczba dwojek: 0
Liczba trojek: 1
Liczba czworek: 1
Liczba piatek: 3
Używamy w tym przykładzie liczb losowych, czyli każde uruchomienie programu będzie dawało różne wyniki (z małym prawdopodobieństwem, że program da te same wyniki).
Podsumowanie
Oczyście można ten program zrobić prościej i aby miał bardziej wszechstronne zastosowanie. Do tego moglibyśmy użyć tablicy aby zliczać sobie oceny pod indexami lub HashMap-y jeśli zakres liczb mógłby być np od 1 do 10000 lub większy. Ale małymi kroczkami dojdziemy do bardziej zaawansowanych przykładów.