mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
fix NumberUtil
This commit is contained in:
parent
a341ad0198
commit
03e45bc514
@ -13,6 +13,7 @@
|
||||
* 【core 】 ArrayUtil.indexOf修改double的equals判断(pr#1147@Github)
|
||||
* 【core 】 优化StrUtil中部分参数校验以及逻辑处理(pr#1144@Github)
|
||||
* 【core 】 简化CreditCode逻辑去除无用Character.toUpperCase(pr#1145@Github)
|
||||
* 【core 】 NumberUtil增加generateRandomNumber重载,可自定义seed(issue#I1XTUT@Gitee)
|
||||
|
||||
### Bug修复
|
||||
* 【core 】 解决农历判断节日未判断大小月导致的问题(issue#I1XHSF@Gitee)
|
||||
|
@ -1272,27 +1272,36 @@ public class NumberUtil {
|
||||
* @return 随机int数组
|
||||
*/
|
||||
public static int[] generateRandomNumber(int begin, int end, int size) {
|
||||
// 种子你可以随意生成,但不能重复
|
||||
final int[] seed = ArrayUtil.range(begin, end);
|
||||
return generateRandomNumber(begin, end, size, seed);
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成不重复随机数 根据给定的最小数字和最大数字,以及随机数的个数,产生指定的不重复的数组
|
||||
*
|
||||
* @param begin 最小数字(包含该数)
|
||||
* @param end 最大数字(不包含该数)
|
||||
* @param size 指定产生随机数的个数
|
||||
* @param seed 种子,用于取随机数的int池
|
||||
* @return 随机int数组
|
||||
* @since 5.4.5
|
||||
*/
|
||||
public static int[] generateRandomNumber(int begin, int end, int size, int[] seed) {
|
||||
if (begin > end) {
|
||||
int temp = begin;
|
||||
begin = end;
|
||||
end = temp;
|
||||
}
|
||||
// 加入逻辑判断,确保begin<end并且size不能大于该表示范围
|
||||
if ((end - begin) < size) {
|
||||
throw new UtilException("Size is larger than range between begin and end!");
|
||||
}
|
||||
// 种子你可以随意生成,但不能重复
|
||||
int[] seed = new int[end - begin];
|
||||
Assert.isTrue((end - begin) > size, "Size is larger than range between begin and end!");
|
||||
Assert.isTrue(seed.length > size, "Size is larger than seed size!");
|
||||
|
||||
for (int i = begin; i < end; i++) {
|
||||
seed[i - begin] = i;
|
||||
}
|
||||
int[] ranArr = new int[size];
|
||||
Random ran = new Random();
|
||||
final int[] ranArr = new int[size];
|
||||
// 数量你可以自己定义。
|
||||
for (int i = 0; i < size; i++) {
|
||||
// 得到一个位置
|
||||
int j = ran.nextInt(seed.length - i);
|
||||
int j = RandomUtil.randomInt(seed.length - i);
|
||||
// 得到那个位置的数值
|
||||
ranArr[i] = seed[j];
|
||||
// 将最后一个未用的数字放到这里
|
||||
|
@ -1,10 +1,12 @@
|
||||
package cn.hutool.core.util;
|
||||
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* {@link NumberUtil} 单元测试类
|
||||
@ -269,4 +271,12 @@ public class NumberUtilTest {
|
||||
Assert.assertTrue(NumberUtil.isPowerOfTwo(1));
|
||||
Assert.assertFalse(NumberUtil.isPowerOfTwo(17));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void generateRandomNumberTest(){
|
||||
final int[] ints = NumberUtil.generateRandomNumber(10, 20, 5);
|
||||
Assert.assertEquals(5, ints.length);
|
||||
final Set<?> set = Convert.convert(Set.class, ints);
|
||||
Assert.assertEquals(5, set.size());
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user