包含给定最小值和最大值之间的随机整数的给定大小数组的方法
Method for array of given size containing random integers between given min and max
我必须在 Java 中执行此操作:
Write a method fillArray() that takes three integers: (s, min, max),
and returns an array of size s having random integers with values
between min and 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 之后所做的事情。
有时它适用于大多数元素,但我仍然得到一些为 0 的元素,这是错误的,因为最小值为 10。
知道如何解决这个问题吗?
Math.random()
Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0.
因此,由于您生成的随机数始终介于 [0 - 1) (Zero inclusive & 1 exclusiv
之间,因此您需要将它们乘以所需的最大数以生成大于 1 的随机数。在 [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)
returns 之间的值 [0.0 - 15.999..]
将 min = 5
添加到每个值:
(Math.random() * (max + 1)) + min
将导致 [5.0 - 20.999..]
范围内的值,这是不需要的。要更改它,您需要在乘法时从最大值中减去最小值:
(Math.random() * (max - min + 1)) + min
这将导致正确的范围 [5.0 - 15.999..]
,您需要在其中应用转换 (int)
以获得随机整数而不是双精度数。所以你的方法看起来像
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));
}
我必须在 Java 中执行此操作:
Write a method fillArray() that takes three integers: (s, min, max), and returns an array of size s having random integers with values between min and 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 之后所做的事情。
有时它适用于大多数元素,但我仍然得到一些为 0 的元素,这是错误的,因为最小值为 10。
知道如何解决这个问题吗?
Math.random()
Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0.
因此,由于您生成的随机数始终介于 [0 - 1) (Zero inclusive & 1 exclusiv
之间,因此您需要将它们乘以所需的最大数以生成大于 1 的随机数。在 [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)
returns 之间的值 [0.0 - 15.999..]
将 min = 5
添加到每个值:
(Math.random() * (max + 1)) + min
将导致 [5.0 - 20.999..]
范围内的值,这是不需要的。要更改它,您需要在乘法时从最大值中减去最小值:
(Math.random() * (max - min + 1)) + min
这将导致正确的范围 [5.0 - 15.999..]
,您需要在其中应用转换 (int)
以获得随机整数而不是双精度数。所以你的方法看起来像
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));
}