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

Zadanie dla początkujących

Object Storage Arubacloud
+2 głosów
300 wizyt
pytanie zadane 7 marca 2022 w Java przez ArtuJarosz Nowicjusz (140 p.)

Witam, mam problem z zadaniem i nie mogę znaleźć zrozumiałego dla mnie rozwiązania. Zadanie wygląda następująco :

Napisać program, który wczytuje od użytkownika liczby dopóty, dopóki nie zostanie podana liczba
mniejsza od 1. Następnie dokonuje losowania tylu liczb, ile wynosiła maksymalna z wartości podanych przez
użytkownika. Zakres losowanych liczb, to -199 do 199. W wyniku powinien zostać wyświetlony stosunek
średniej arytmetycznej wszystkich „co drugich" wylosowanych liczb dodatnich do wszystkich co trzecich
wylosowanych liczb (można zacząć od dowolnego momentu, ale nie później niż od 2 i 3 z podanych liczb).
W programie nie należy używać tablic.

Doszedłem do momentu wylosowania licz w ilości podanej przez użytkownika. Największy problem na ten moment sprawia mi z jak zsumować liczby, które zostały wylosowane aby przejść do dalszej części zadani.

Z góry dziękuję za pomoc.

import java.util.Random;
import java.util.Scanner;

public class Zadanie {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Random r = new Random();

        System.out.println("Proszę podac liczbę");

        int liczba;
        int min = 200;
        int max = -200;


        while ((liczba = sc.nextInt()) > 0) {
            max = liczba > max ? liczba : max;

        }
        for (int i = 0; i <max ; i++) {

            int los = r.nextInt(400) -199;
            System.out.println(los);


        }

    }

}

 

2 odpowiedzi

+2 głosów
odpowiedź 7 marca 2022 przez Wiciorny Ekspert (269,790 p.)

ak zsumować liczby, które zostały wylosowane aby przejść do dalszej części zadani.a

Skoro masz już sposób na wybieranie tych liczb, odpowiedzi może być kilka- najlepiej jest to zrobić - 
> zapisując te liczby do tablicy ( zbioru Set- jeśli liczby nie mogą się powtarzać, ale wtedy musiałbys losować ponownie jeśli warunek spowodowałby ponowienie liczby ) 


a następnie jako wynik zredukować sumując wartości 
stworzyć te tablice jako pole klasy :) 

static List<Integer> twojaTablica = new ArrayList<Integer>();

....

// dodawac w metodzie wykonywania zadan 
twojaTablica,add(value);

Dwie istotne rzeczy TABLICA- powinna być polem klasy i być statyczna dla przykładu

jeśli tworzysz List<Integer> twojaTablica to nie musisz pakować tego do Arrays.Stream, zanim użyjesz funkcji redukcje, jeśli tablice utworzysz prymitywną tzn tablicaDanych int[] -> wtedy tak musisz zapisać 

int suma = Arrays.stream(tablicaDanych).reduce(0, (a, b) -> a + b);
//lub 
int suma = Arrays.stream(tablicaDanych).reduce(0, Integer::sum); // suma

 

komentarz 7 marca 2022 przez ArtuJarosz Nowicjusz (140 p.)
Niestety właśnie w zadaniu nie można korzystać z tablic, tak jest zapisane w jego treści.
komentarz 7 marca 2022 przez Wiciorny Ekspert (269,790 p.)

no to teraz pytanie, czy listy- możesz traktować jako nie tablice ewentualnie inne sety?
Ale podejrzewam, że tu chodzi o KOLEKCJE.

Sugeruje w takim razie dodać jakąś CAŁKIEM INNĄ ZMIENNĄ która będzie miałą wartość poprzedniej i do niej dodawać następną jeśli ta wystąpi, i tak dalej... idąc 

dodatkowo, pamięaj że to powinno być pole klasy i statyczne 

na zasadzie 

int suma = 0;

suma = 50 ;  // przyszla 1 wartosc
suma+= drugaWartosc; // dodanie drugiej wartosci do sumy 

Trywialne jest to wtedy, gdy jak sam stwierdziles - wiesz juz jakie liczby potrzebujesz ( tzn massz juz je wylosowane, znasz ich wartosci ) , wtedy po prostu w tym momencie je dodajesz 

+1 głos
odpowiedź 7 marca 2022 przez Idezam Początkujący (410 p.)

Możesz dodać na przykład kolejne zmienne, jak np coDrugie oraz coTrzecie do których będziesz dopisywał wartość wylosowanej liczby przy każdej iteracji pętli, kiedy liczba faktycznie jest tą co drugą, lub co trzecią. Wypadało by też dodać liczniki do których będziesz dodawał jedynkę kiedy dodasz wartość do poszczególnej zmiennej.

Przykład: Finalnie wartość zmiennej "coDrugie" może wynosić np 142, a w zmiennej zliczającej możesz mieć liczbę 11 (bo tyle razy wartość została dopisana do zmiennej "coDrugie"), aby wyliczyć średnią wystarczy podzielić (coDrugie/licznik) czyli w tym przypadku 142/11.

komentarz 7 marca 2022 przez ArtuJarosz Nowicjusz (140 p.)
Pytanie tylko w jaki sposób powinienem zaimplementować te zmienne. Załóżmy, że użytkownik podał największą wartość 5 i te pięć licz zostało wylosowanych w zmiennej "int los". W jaki sposób teraz wyciągnąć te liczy z tej zmiennej aby móc wyliczyć z nich średnią.

Może być to banalne pytanie jednak jestem na poziomie mocno początkującym i nie wiem jak w tym wypadku się zachować.
1
komentarz 7 marca 2022 przez Wiciorny Ekspert (269,790 p.)
w zmiennej przechowujesz jedną wartość o ile nie jest ona kolekcją .
1
komentarz 7 marca 2022 przez Idezam Początkujący (410 p.)
Rozpisałem Ci dokładnie jak powinieneś zrobić to zadanie, razem z działaniem algorytmu. https://pastebin.com/NGsFyPgJ
komentarz 8 marca 2022 przez ArtuJarosz Nowicjusz (140 p.)
Super, dziękuje. Bardzo mi  to pomogło.

Podobne pytania

0 głosów
0 odpowiedzi 312 wizyt
0 głosów
3 odpowiedzi 579 wizyt
0 głosów
2 odpowiedzi 420 wizyt

92,568 zapytań

141,420 odpowiedzi

319,623 komentarzy

61,956 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...