JavaRush /Blog Java /Random-PL /Wygeneruj liczbę losową z zadanego zakresu
L2CCCP
Poziom 9

Wygeneruj liczbę losową z zadanego zakresu

Opublikowano w grupie Random-PL
Witam po drugiej stronie ekranu. Każdy z nas prędzej czy później staje przed koniecznością wygenerowania liczby losowej z zadanego zakresu, czy to liczby rzeczywistej, czy też całkowitej. Generowanie liczby losowej z zadanego zakresu - 1Po co? Tak naprawdę nie jest to istotne, może to być funkcja obliczająca szansę na wywołanie jakiegoś zdarzenia, uzyskanie losowego mnożnika lub jakąkolwiek inną. Więc zrozumieliśmy, dlaczego jest to potrzebne, a mianowicie do czegokolwiek :) Tak naprawdę istnieje wiele metod uzyskania liczby pseudolosowej, ale podam przykład z klasą Math, a mianowicie metodę random(); Co my mamy? Wywołanie metody Math.random()zwraca pseudolosową liczbę rzeczywistą ( double) z zakresu [0;1), czyli od 0 do 1 z wyłączeniem 1, co oznacza, że ​​maksymalna liczba w zakresie wynosi 0,99999999999... OK, otrzymaliśmy liczbę pseudolosową, ale co jeśli potrzebujemy własnego asortymentu? Na przykład, czy potrzebujemy liczby pseudolosowej z zakresu [0;100)? Piszemy kod:
public static void main(String... args)
{
	final double max = 100.; // Максимальное число для диапазона от 0 до max
	final double rnd = rnd(max);

	System.out.println("Псевдослучайное вещественное число: " + rnd);
}

/**
 * Метод получения псевдослучайного вещественного числа от 0 до max (исключая max);
 */
public static double rnd(final double max)
{
	return Math.random() * max;
}
Wyszło nieźle, ale max(w naszym przypadku) nadal tego nie dostaniemy. Aby otrzymać losową liczbę z zakresu [0;100], musimy dodać max1 do naszej, a następnie przekonwertować ją na liczbę całkowitą, taką jak intlub long(w zależności od używanych zakresów). Piszemy kod:
public static void main(String... args)
{
	final int max = 100; // Максимальное число для диапазона от 0 до max
	final int rnd = rnd(max);

	System.out.println("Псевдослучайное целое число: " + rnd);
}

/**
 * Метод получения псевдослучайного целого числа от 0 до max (включая max);
 */
public static int rnd(int max)
{
	return (int) (Math.random() * ++max);
}
Uwaga: Jak widać, zmienna max została zwiększona przez formę przedrostka. (Jeśli nie wiesz co to jest, radzę przeczytać mój artykuł ) Świetnie, mamy to, czego chcieliśmy, ale jeśli potrzebujemy zakresu nie od 0, ale np. [10;75] Piszemy kod:
public static void main(String... args)
{
	final int min = 10; // Минимальное число для диапазона
	final int max = 75; // Максимальное число для диапазона
	final int rnd = rnd(min, max);

	System.out.println("Псевдослучайное целое число: " + rnd);
}

/**
 * Метод получения псевдослучайного целого числа от min до max (включая max);
 */
public static int rnd(int min, int max)
{
	max -= min;
	return (int) (Math.random() * ++max) + min;
}
Parsowanie kodu z metody rnd:

Минимальное число диапазона = 10;
Максимальное число диапазона = 75;
max -= min; // Отнимаем от максимального значения минимальное для получения множителя псевдослучайного вещественного числа.
Maksymalna liczba po obliczeniu wynosi 65. Pseudolosowa liczba rzeczywista (na przykład) to 0,18283417347179454 (Uzyskano przez wywołanie Math.random()). Liczbę maksymalną zwiększano za pomocą formy przedrostkowej przed mnożeniem. Maksymalna liczba wynosi teraz 66. Pomnóż 0,18283417347179454 przez 66. Wynik mnożenia to 12,06705544913844. Wynik mnożenia liczby maksymalnej przez pseudolosową liczbę rzeczywistą konwertujemy na liczbę całkowitą int. Do przekształconego wyniku dodajemy liczbę minimalną równą 12. Zwracamy wynik: 22 Jak widać z analizy, nawet jeśli pseudolosowa liczba rzeczywista jest równa zeru, to w rezultacie zwrócimy nasze minimum dodania naszej minimalnej liczby do wyniku mnożenia. Mam nadzieję, że było to dla Ciebie przydatne i pouczające. Powodzenia w opanowaniu Javy ;) Jeszcze kilka moich artykułów: Co to jest inkrementacja i dekrementacja Operator dzielenia modulo
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION