JavaRush /Java Blog /Random-IT /Genera un numero casuale in un dato intervallo
L2CCCP
Livello 9

Genera un numero casuale in un dato intervallo

Pubblicato nel gruppo Random-IT
Ciao dall'altra parte dello schermo. Chiunque di noi prima o poi incontra la necessità di generare un numero casuale in un determinato intervallo, sia esso un numero reale o un numero intero. Generazione di un numero casuale in un dato intervallo - 1Per quello? In realtà questo non è importante, potrebbe essere una funzione per calcolare la possibilità di attivare qualche evento, ottenere un moltiplicatore casuale o qualsiasi altro. Quindi, abbiamo capito perché questo è necessario, vale a dire per qualsiasi cosa :) In effetti, ci sono molti metodi per ottenere un numero pseudo-casuale, ma darò un esempio con la classe Math, cioè il metodo random(); Cosa abbiamo? La chiamata al metodo Math.random()restituisce un numero reale pseudo-casuale ( double) dall'intervallo [0;1), ovvero da 0 a 1 escluso 1, il che significa che il numero massimo nell'intervallo è 0,99999999999... Ok, abbiamo ottenuto un numero pseudo-casuale, ma e se avessimo bisogno della nostra gamma? Ad esempio, abbiamo bisogno di un numero pseudocasuale compreso nell'intervallo [0;100)? Scriviamo il codice:
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;
}
Il risultato non è stato male, ma max(nel nostro caso) non lo capiremo ancora. Per ottenere un numero casuale nell'intervallo [0;100] dobbiamo aggiungere max1 al nostro e quindi convertirlo in un numero intero come into long(a seconda degli intervalli che utilizzerai). Scriviamo il codice:
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);
}
Nota: come puoi vedere, la variabile max è stata incrementata dalla forma del prefisso. (Se non sai di cosa si tratta ti consiglio di leggere il mio articolo ) Ottimo, abbiamo ottenuto quello che volevamo, ma se abbiamo bisogno di un range non da 0, ma ad esempio [10;75] Scriviamo il codice:
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;
}
Analizzando il codice dal metodo rnd:

Минимальное число диапазона = 10;
Максимальное число диапазона = 75;
max -= min; // Отнимаем от максимального значения минимальное для получения множителя псевдослучайного вещественного числа.
Il numero massimo dopo il calcolo è 65. Il numero reale pseudo-casuale (ad esempio) è 0,18283417347179454 (è stato ottenuto chiamando Math.random()). Il numero massimo è stato incrementato con una forma di prefisso prima della moltiplicazione. Il numero massimo è ora 66. Moltiplica 0,18283417347179454 per 66. Il risultato della moltiplicazione è 12,06705544913844. Convertiamo il risultato della moltiplicazione del numero massimo per un numero reale pseudocasuale in un tipo intero int. Sommiamo il numero minimo al risultato trasformato che è uguale a 12. Restituiamo il risultato: 22 Come si può vedere dall'analisi, anche se il numero reale pseudo-casuale è uguale a zero, restituiremo come risultato il nostro minimo di aggiungere il nostro numero minimo con il risultato della moltiplicazione. Spero che questo sia stato utile e informativo per te. Buona fortuna per padroneggiare Java ;) Un altro paio dei miei articoli: Cos'è l'incremento e il decremento L'operatore di divisione modulo
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION