• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

instrukcje warunkowe, iteracyjne, obliczenia nie moge sobie poradzić

Object Storage Arubacloud
0 głosów
511 wizyt
pytanie zadane 3 listopada 2018 w Java przez michalpdg Nowicjusz (120 p.)

 

Witam, jako że jestem zupełnie zielony w te sprawy proszę o pomoc. Jest to zadanie zapewne banalne, jednakże mi sprawia spore problemy jako dla początkującego. Już 2 godzinę głowię się jak to wykonać.

Statystyka ocen. Zakładamy, że grupa studencka liczy 15 osób. Proszę napisać program, który wczyta ocenę zaliczeniową każdego studenta (razem 15 liczb, każda z przedziału 2..5, inne oceny mają być ignorowane). Po wprowadzeniu ocen, program ma wyświetlić ilu studentów uzyskało 2-ki, 3-ki, 4-ki a ilu 5-ki.

3 odpowiedzi

0 głosów
odpowiedź 3 listopada 2018 przez Tomek Sochacki Ekspert (227,510 p.)
Jakie masz dane wejściowe, tablicę z różnymi ocenami dla 15 osób i zakładamy, że część z nich może mieć 1 lub 6 więc ostateczna tablica, która nas interesuje w analizie może być mniejsza niż 15? Trochę mało precyzyjnie to opisałeś. Daj najlepiej po prostu tę tablicę wejściową i wtedy rozpisze się krokowo algorytm, który sobie przerobisz na kod.
0 głosów
odpowiedź 3 listopada 2018 przez miro Pasjonat (23,870 p.)

Tak się bawiłem z java streams 

var list = new ArrayList<Integer>(Arrays.asList(1,2,3,2,5,6)); 

Map<Integer, Long> map = list.stream()
.filter(x -> x > 1)
.filter(x -> x < 6)
.collect(Collectors.groupingBy((x -> x), Collectors.counting()));

Napisałem tak, aby nie dawać Tobie gotowca. Możesz stworzyć sobie mapę:
klucz - ocena
wartość - licznik ocen 
Następnie w pętli filtrować czy oceny mieszczą się w twoim przedziale, jak tak to zwiększ licznik.

komentarz 3 listopada 2018 przez Tomasz90 Nałogowiec (25,140 p.)
Pewnie nic nie wniosę tym co napiszę, bo Twoja odpowiedź jest poprawna, ale można sobie tą listę utworzyć przez List.of (niemodyfikowalna lista). zrobić jednym filtrowaniem z dwoma warunkami, i zamiast (x->x) użyć Function.identity() (ale to już kwestia gustu bo one to samo robi co ta lamba).
komentarz 3 listopada 2018 przez mbabane Szeryf (79,280 p.)

List.of jak List.of, ale wystarczy:

var list = Arrays.asList(1,2,3,2,5,6);
komentarz 3 listopada 2018 przez miro Pasjonat (23,870 p.)
Dzięki za odp. Faktycznie lepiej by było z list of. Nie ma doświadczenia z nowszymi wersjami Javy więc zapomniałem o tym. Poza tym i tak kolega musi oceny wczytać z chyba konsoli.

Czytałem że lepiej rozbijać to na dwoma warunki bo jest czytelniej.

Chyba mapToInt() nie przyjmuje Function.identity(), więc wolę pozostać przy x->x.
1
komentarz 3 listopada 2018 przez Tomasz90 Nałogowiec (25,140 p.)
No tak wystarczy z tą różnicą że Arrays.asList robi modyfikowalną listę. Ja takie warunki jak te z filter wrzucam do osobnej metody i w filter używam method reference i jest wtedy czytelnie. Nawet jak to lista tablica/stringów by była to map(Integer::valueOf) i jest wtedy Integerów. Grouping przyjmuje Function jako pierwszy argument więc to zadziała. Nawet jakby z konsoli było to wczytywane to wtedy w ogóle listy nie trzeba tworzyć osobno tylko od razu Arrays.stream(args).
komentarz 3 listopada 2018 przez miro Pasjonat (23,870 p.)
Z Function.identity() chodziło mi o to, że jak nie wszędzie mogę tego użyć to wolę sobie nie mieszać w głowie. Doceniam wasze porady, dzięki.
0 głosów
odpowiedź 6 listopada 2018 przez kejm_ Bywalec (2,310 p.)

Jako, że nie powinno się dawać tu gotowców, jednak szkoda abyś nie poprawił tej oceny. Masz tu niekompletny kod.

Prosty w zrozumieniu i gotowy do modyfikacji. Zaimplementuj tu jeszcze ograniczenie podania innych liczb, aby użytkownik nie mógł wpisać oceny np:36. 

import java.util.Scanner;

public class Studenci {

    public static void main(String args[]){

        int[] tab = new int[15];
        int rating3 = 0;
        int rating4 = 0;
        int rating5 = 0;

        Scanner load = new Scanner(System.in);
        System.out.println("Podaj oceny");

        for(int i=0; i<tab.length; i++)
            tab[i] = load.nextInt();

        for(int i=0; i<tab.length; i++){
            if(tab[i]==3){
                rating3++;
            }
            if(tab[i]==4){
                rating4++;
            }
            if(tab[i]==5){
                rating5++;
            }
        }

        System.out.println("ilosc trojek:" + rating3);
        System.out.println("ilosc czwórek:" + rating4);
        System.out.println("ilosc piątek:" + rating5);

    }
}

 

Podobne pytania

0 głosów
2 odpowiedzi 618 wizyt
pytanie zadane 10 października 2017 w C i C++ przez Steady Obywatel (1,140 p.)
0 głosów
2 odpowiedzi 395 wizyt
pytanie zadane 6 października 2017 w PHP przez krispello Obywatel (1,440 p.)
0 głosów
2 odpowiedzi 541 wizyt

92,690 zapytań

141,603 odpowiedzi

320,098 komentarzy

62,050 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...