JavaRush /จาวาบล็อก /Random-TH /สร้างตัวเลขสุ่มในช่วงที่กำหนด
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);
}
หมายเหตุ:อย่างที่คุณเห็น ตัวแปรสูงสุดถูกเพิ่มขึ้นตามแบบฟอร์มคำนำหน้า (ถ้าคุณไม่รู้ว่ามันคืออะไร ฉันแนะนำให้คุณอ่านบทความของฉัน ) เยี่ยมเลย เราได้สิ่งที่เราต้องการแล้ว แต่ถ้าเราต้องการ range ไม่ใช่ 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 ;) บทความของฉันอีกสองสามบทความ: การเพิ่มขึ้นและการลดลงคืออะไร ตัวดำเนินการแบ่งแบบโมดูโล
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION