JavaRush /مدونة جافا /Random-AR /توليد رقم عشوائي في نطاق معين
L2CCCP
مستوى

توليد رقم عشوائي في نطاق معين

نشرت في المجموعة
مرحبًا على الجانب الآخر من الشاشة. أي واحد منا، عاجلا أم آجلا، يواجه الحاجة إلى توليد رقم عشوائي في نطاق معين، سواء كان رقما حقيقيا أو عددا صحيحا. توليد رقم عشوائي في نطاق معين - 1لماذا؟ في الواقع، هذا ليس مهمًا، فقد يكون دالة لحساب فرصة إطلاق حدث ما، أو الحصول على مضاعف عشوائي، أو أي شيء آخر. لذلك، اكتشفنا سبب الحاجة إلى ذلك، أي لأي شيء :) في الواقع، هناك الكثير من الطرق للحصول على رقم عشوائي زائف، لكنني سأقدم مثالاً مع الفصل، Mathأي الطريقة random()؛ ما الذي نملكه؟ يؤدي استدعاء الطريقة Math.random()إلى إرجاع رقم حقيقي شبه عشوائي ( double) من النطاق [0;1)، أي من 0 إلى 1 باستثناء 1، مما يعني أن الحد الأقصى للرقم في النطاق هو 0.99999999999... حسنًا، لقد حصلنا على رقم شبه عشوائي، ولكن ماذا لو كنا بحاجة إلى مجموعتنا الخاصة؟ على سبيل المثال، هل نحتاج إلى رقم عشوائي زائف من النطاق [0;100)؟ نكتب الكود :
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;
}
لم يكن الأمر سيئًا، ولكن max(في حالتنا) ما زلنا لن نحصل عليه. من أجل الحصول على رقم عشوائي في النطاق [0;100] نحتاج إلى إضافة max1 إلى رقمنا ثم تحويله إلى عدد صحيح مثل intأو long(اعتمادًا على النطاقات التي ستستخدمها). نكتب الكود :
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);
}
ملاحظة: كما ترون، تمت زيادة المتغير الأقصى بواسطة نموذج البادئة. (إذا كنت لا تعرف ما هو هذا، أنصحك بقراءة مقالتي ) رائع، لقد حصلنا على ما أردنا، ولكن إذا كنا بحاجة إلى نطاق ليس من 0، ولكن على سبيل المثال [10;75] نكتب الكود:
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;
}
تحليل الكود من الطريقة rnd:

Минимальное число диапазона = 10;
Максимальное число диапазона = 75;
max -= min; // Отнимаем от максимального значения минимальное для получения множителя псевдослучайного вещественного числа.
الحد الأقصى للرقم بعد الحساب هو 65. الرقم الحقيقي العشوائي الزائف (على سبيل المثال) هو 0.18283417347179454 (تم الحصول عليه عن طريق الاتصال Math.random()). تمت زيادة الحد الأقصى للعدد باستخدام نموذج بادئة قبل الضرب. الحد الأقصى للعدد الآن هو 66. اضرب 0.18283417347179454 في 66. نتيجة الضرب هي 12.06705544913844. نقوم بتحويل نتيجة ضرب الحد الأقصى لعدد حقيقي شبه عشوائي إلى نوع عدد صحيح int. نضيف الحد الأدنى للنتيجة المحولة وهو 12. ونعيد النتيجة: 22 كما يتبين من التحليل، حتى لو كان الرقم الحقيقي العشوائي الزائف يساوي الصفر، فسنعيد الحد الأدنى لدينا نتيجة لذلك لإضافة الحد الأدنى لعددنا مع نتيجة الضرب. آمل أن يكون هذا مفيدًا وغنيًا بالمعلومات بالنسبة لك. حظًا موفقًا في إتقان Java؛) المزيد من مقالاتي: ما هو التزايد والتناقص مشغل قسمة modulo
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION