logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[JAVA] Math.random - wyłączenie liczby z zakresu.

greep 01 Mar 2010 22:08 15597 6
REKLAMA
  • #1 7771040
    greep
    Poziom 19  
    Posty: 525
    Pomógł: 11
    Ocena: 38
    Wiem, ze w Java mozna wygenerowac 'losowa' liczbe calkowita z pewnego zakresu liczb uzywajac metody Math.random

    Np: zeby wygenerowac losowa liczbe calkowita z zakresu liczb 2-10 napiszemy:
    x = ( 2 + (int) Math.random()* 8); // osiem bo 10-2=8

    Czy jest mozliwosc wygenerowania losowej liczby calkowitej z dowolnego zakresu liczb z wylaczeniem jednej lub wiecej liczb? Np: chce wygenerowac losowa liczbe calkowita z zakresu liczb 2 - 10 z wylaczeniem liczby 5?
    Czyli wygenerowana liczba moze byc: 2, 3, 4, 6, 7, 8, 9, 10.

    Bylbym bardzo wdzieczny gdyby ktos przedstawil kod potrzebny rozwiazania tego problemu.
    Zastanawia mnie czy problem taki mozna rozwiazac bezposrednio, czyli przez dodanie jakiegos parametru do metody Math.random, czy moze potrzeba troche wiecej kodu?

    z gory dziekuje za pomoc

    Poprawiłem tytuł. - arnoldziq
  • REKLAMA
  • Pomocny post
    #2 7771400
    przemo_wielki
    Poziom 24  
    Posty: 583
    Pomógł: 61
    Ocena: 10
    Nie znam takie wbudowanej funkcji. Ale można to obejść, możesz losować liczby i sprawdzać czy wylosowana to 5 jeżeli tak to powtarzasz. To ma jedną wadę wyobraź sobie że cały czas będziesz losował 5 ... Druga opcja to wykonanie 2 losowań pierwsze dla liczb z przedziału np. <2,5) drugie (5,n>. Trzecie co przychodzi mi na myśl to wrzucasz konkretne liczby do tablicy i z tej tablicy losujesz (losujesz tak naprawdę numer indeksu).
  • REKLAMA
  • #3 7771813
    greep
    Poziom 19  
    Posty: 525
    Pomógł: 11
    Ocena: 38
    w moim programie to wlasciwie chce wykorzystac tablice.
    chodzi o to zeby dla 1 warunku losowal liczbe z indeksu od 1 do 100, a dla 2 warunku zeby losowal liczbe z indeksu od 1 do 100 z pominieciem indeksu 5.

    moglbys rozwianac ta 3 opcje.

    pozdrawiam i dzieki za pomoc
  • REKLAMA
  • #4 7771839
    przemo_wielki
    Poziom 24  
    Posty: 583
    Pomógł: 61
    Ocena: 10
    Jeżeli jest to zakres od 1 do 100 to pierwsza opcja będzie skuteczna: czyli sprawdzanie czy liczba jest 5 i w pozytywnym przypadku ponowne losowanie. Prawdopodobieństwo że wypadnie 5 to 1/100 więc dosyć mało.

    Co do 3 opcji zwyczajnie wrzucasz 9 liczb od 1 do 10 z wyłączeniem 5 do tablicy 9 elementowej i losujesz liczby od 1 do 9 które są elementami tablicy np. wylosowałeś 5 to bierzesz tablica[5]=np.6;

    Dla liczb od 1 do 10 miało to jeszcze jakieś uzasadnienie (np. jakbyś wyłączył kilka liczb) ale dla zakresu od 1 do 100 (i wyłączenia tylko 1 liczny) przedział jest tak duży i prawdopodobieństwo tak małe że bym się w to nie bawił i skorzystał z pierwszej opcji.
  • REKLAMA
  • #5 7776359
    greep
    Poziom 19  
    Posty: 525
    Pomógł: 11
    Ocena: 38
    dzieki za odpowiedz

    jeszcze tak tylko dla potwierdzenia, czy ponizy 'pseudokod' jest ok:

    IF ( x > 100 )
    y = random integer (2-10)

    ELSE // x <= 100
    DO
    y = random integer (2-10)
    WHILE (y == 5)
  • #6 7843619
    eccocce
    Poziom 2  
    Posty: 2
    wygląda ok, a można wiedzieć do czego potrzebny ci taki oszukany random? ;]
  • #7 7845007
    greep
    Poziom 19  
    Posty: 525
    Pomógł: 11
    Ocena: 38
    chodzilo mi o losowe wygenerowanie dnia urodzin i wylaczenie 29 lutego (jednego miejsca z tablicy) w przypadku wylosowania dnia urodzin z roku przestepnego.

    pzdr.

Podsumowanie tematu

✨ W dyskusji poruszono problem generowania losowych liczb całkowitych w języku Java z określonego zakresu, z wyłączeniem jednej lub więcej liczb. Użytkownik zapytał, jak można to osiągnąć, korzystając z metody Math.random. Odpowiedzi sugerowały różne podejścia, w tym losowanie liczb i sprawdzanie, czy wylosowana liczba to ta, którą chcemy pominąć, oraz wykorzystanie tablicy do przechowywania dozwolonych wartości. Użytkownik potwierdził, że chce użyć tablicy do losowania liczb z zakresu 1-100, z pominięciem indeksu 5. W końcu, użytkownik wyjaśnił, że celem jest losowe generowanie dnia urodzin, z wyłączeniem 29 lutego w latach przestępnych.
Wygenerowane przez model językowy.
REKLAMA