這個問題在這里已經有了答案: 如何在 Java 中生成特定范圍內的隨機整數? (71 個回答) 2天前關閉。
我必須在 Java 中這樣做:
撰寫一個 fillArray() 方法,它接受三個整數:(s, min, max),并回傳一個大小為 s 的陣列,其中包含值介于 min 和 max 之間的隨機整數。
這是我寫的代碼
public static void fillArray(int s, int min, int max) {
int[] random = new int[s];
for (int i = 0; i < s; i ) {
int n = (int) (Math.random()*100 %s);
if (n > min && n < max) {
random[i] = n;
}
}
System.out.printf("Here's an array of size %d, whose elements vary between %d and %d: \n", s, min, max);
System.out.print(Arrays.toString(random));
}
問題是,當我在 main 中實作我的方法時fillArray(10, 10, 20),它給了我大小為 10 的陣列,其中元素為 0。
我嘗試在代碼中使用這個特定的運算式
int n = (int) (Math.random()*100 %s);
并改變我在 *100 之后所做的事情。
Sometimes it works for most elements, but I still get some elements which are 0, which is wrong since the minimum is 10.
Any idea how I could fix that?
uj5u.com熱心網友回復:
Math.random()
回傳一個帶正號的雙精度值,大于或等于 0.0 且小于 1.0。
因此,由于您生成的亂數始終介于兩者之間,因此[0 - 1) (Zero inclusive & 1 exclusiv您需要將它們乘以所需的最大數以生成大于一的亂數。生成亂數之間的示例[0 - 15)可以做
Math.random() * 15
獲取 之間的值[0.0 - 14.999..]。
要在您的值中包含 15,您需要乘以(15 1) = 16
Math.random() * (15 1) or generaly
Math.random() * (max 1)
由于您的要求中還有一個最小值,因此您需要排除0 - min. 為此,您可以簡單地將最小值添加到上述結果中:
(Math.random() * (max 1)) min
但是等等,讓我們看一個min = 5和的例子max = 15。自從
Math.random() * (max 1)
回傳[0.0 - 15.999..]添加min = 5到每個值之間的值:
(Math.random() * (max 1)) min
將導致值在[5.0 - 20.999..]不需要的范圍內。要改變這一點,您需要在乘法時從 max 中減去 min:
(Math.random() * (max - min 1)) min
這將導致[5.0 - 15.999..]您需要應用強制轉換(int)以獲得隨機整數而不是 dobles 的正確范圍。所以你的方法可能看起來像
public static void fillArray(int s, int min, int max) {
int[] random = new int[s];
for (int i = 0; i < s; i ) {
int n = (int) (Math.random() * (max - min 1)) min;
random[i] = n;
}
System.out.printf("Here's an array of size %d, whose elements vary between %d and %d: \n", s, min, max);
System.out.print(Arrays.toString(random));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/451793.html
標籤:java arrays for-loop random
下一篇:將整數值存盤到二維陣列中的程式
