Funkcja Random lub Math.random

0

Witam,

Mam problem zwiazany z ta(tymi) funkcja, a raczej z jej(ich) wykorzystaniem. Mianowicie chcialbym wylosowac liczby z jakiegos przedzialu (np [1,59]) z wylaczaniem jakis liczby (np {1,2,3,4}) oraz wylosowac liczby ze zbioru liczb (np z {1,2,3,4}). W skrocie wylosowac liczby z:
[1,59] / {1,2,3,4} oraz {1,2,3,4}

Nie mam pojecia szczerze mowiac jak to zrobic, szukalem dosc dlugo w neci i kompletnie bez skutku. Z gory dziekuje za odp

0

Losowanie z [1,59] z wyłączeniem {1,2,3,4}, to losowanie z [5,59].

Random gen = new Random();
int [] tab = new int[ileChceszLiczb];
for(int i=0;i<tab.length;i++)
{
    tab[i] = gen.nextInt(55)+5;
}
0

to byl tylko przyklad(faktycznie niefortuny), tak wiec wyraze sie inaczej. Chodzi mi o losowanie z [1,59] z wylaczeniem {3,7,45,50} oraz losowanie tylko z liczb {3,7,45,50}

0

może sporządź sobie tablicę gdzie będziesz miał wartości (np nazwij ja z)
{minimalna_losowana_wartosc-1, wartosc_wylaczona[1], wartosc_wylaczona[2], ... , wartosc_wylaczona[n-1],wartosc_wylaczona[n], maksymalna losowana wartosc+1}
i wylosuj jedną liczbę w zakresie [0, n], będzie to oznaczało m (element powyższej tablicy). Jeśli pomiędzy elementami m i m+1 nie ma żadnej wartości (tzn, są to liczby sąsiadujące ze sobą w zbiorze liczb całkowitych) do wylosowania to np zinkrementuj m (oczywiście sprawdzaj czy nie wychodzi poza zakres, wtedy przekręcaj m) i dalej sprawdzaj dopóki nie znajdziesz dobrego zbioru lub ilość inkrementacji nie przekroczy n (wtedy nie ma żadnych możliwych wartości do wylosowania). Jeśli znajdziesz zbiór, z którego można wylosować liczbę to wylosuj liczbę od z[m]+1 do z[m+1]-1

btw. to jest tylko mój pomysł, pewnie na internecie jest kilka algorytmów pozwalających zrobić to wydajniej

0

int [] ext={3,7,45,50};
tab[i] = ext[gen.nextInt(ext.length)]; // jedna z {3,7,45,50}
x = gen.nextInt(55)+5-ext.length;
for(i=0;i<ext.length;++i) if(x>=ext[i]) ++x;
tab[i] =x; // 1..59 bez {3,7,45,50}

0
int[] excl = {3,7,45,50}; //wykluczone liczby dopisujemy rosnąco, jeśli jest ich dużo i zachowanie kolejności jest kłopotliwe, to
//dodatkowo wywołujemy excl = Arrays.sort(excl);
ArrayList<Integer> numbers = new ArrayList<Integer>();
for(int i=1;i<=59;i++)
{
     if(Arrays.binarySearch(excl,i)<0)
     {
          numbers.add(i);
     }
}
int drawn = numbers.get(gen.nextInt(numbers.size()));

1 użytkowników online, w tym zalogowanych: 0, gości: 1