JavaRush /Java Blog /Random-ID /Hasilkan nomor acak dalam rentang tertentu
L2CCCP
Level 9

Hasilkan nomor acak dalam rentang tertentu

Dipublikasikan di grup Random-ID
Halo di sisi lain layar. Setiap dari kita cepat atau lambat menghadapi kebutuhan untuk menghasilkan bilangan acak dalam rentang tertentu, baik itu bilangan real atau bilangan bulat. Menghasilkan nomor acak dalam rentang tertentu - 1Untuk apa? Sebenarnya ini tidak penting, bisa jadi itu adalah fungsi untuk menghitung peluang terjadinya suatu kejadian, mendapatkan pengali acak, atau lainnya. Jadi, kita sudah tahu kenapa ini diperlukan, yaitu untuk apa saja :) Sebenarnya ada banyak sekali cara untuk mendapatkan bilangan pseudo-acak, namun saya akan memberikan contoh dengan kelasnya Math, yaitu metode random(); Apa yang kita punya? Memanggil metode ini Math.random()mengembalikan bilangan real pseudo-acak ( double) dari rentang [0;1), yaitu, dari 0 hingga 1 tidak termasuk 1, yang berarti angka maksimum dalam rentang tersebut adalah 0,99999999999... Oke, kita mendapat nomor pseudo-acak, tapi bagaimana jika kita membutuhkan jangkauan kita sendiri? Misalnya, apakah kita memerlukan bilangan pseudorandom dari rentang [0;100)? Kami menulis kode:
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;
}
Ternyata lumayan, tapi max(dalam kasus kami) kami tetap tidak akan mendapatkannya. Untuk mendapatkan bilangan acak dalam kisaran [0;100] kita perlu menambahkan max1 ke bilangan kita dan kemudian mengubahnya menjadi bilangan bulat seperti intatau long(tergantung pada rentang yang akan Anda gunakan). Kami menulis kode:
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);
}
Catatan: Seperti yang Anda lihat, variabel max bertambah dengan bentuk awalan. (Jika Anda tidak tahu apa ini, saya sarankan Anda membaca artikel saya ) Hebat, kami mendapatkan apa yang kami inginkan, tetapi jika kami memerlukan rentang bukan dari 0, tetapi misalnya [10;75] Kami menulis kode:
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;
}
Mengurai kode dari metode rnd:

Минимальное число диапазона = 10;
Максимальное число диапазона = 75;
max -= min; // Отнимаем от максимального значения минимальное для получения множителя псевдослучайного вещественного числа.
Jumlah maksimum setelah perhitungan adalah 65. Bilangan real pseudo-acak (misalnya) adalah 0,18283417347179454 (Diperoleh dengan menelepon Math.random()). Jumlah maksimum bertambah dengan bentuk awalan sebelum perkalian. Angka maksimalnya sekarang adalah 66. Kalikan 0.18283417347179454 dengan 66. Hasil perkaliannya adalah 12.06705544913844. Hasil perkalian bilangan maksimal dengan bilangan real pseudorandom kita ubah menjadi tipe bilangan bulat int. Kita tambahkan bilangan minimum ke hasil transformasi yaitu sama dengan 12. Kita kembalikan hasilnya: 22 Seperti yang bisa dilihat dari analisis, meskipun bilangan real pseudo-acak sama dengan nol, kita akan mengembalikan bilangan minimum kita sebagai hasil menjumlahkan bilangan minimum kita dengan hasil perkalian. Saya harap ini bermanfaat dan informatif bagi Anda. Semoga berhasil menguasai Java ;) Beberapa artikel saya lagi: Apa yang menambah dan mengurangi Operator pembagian modulo
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION