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 】 ArrayUtil.indexOf修改double的equals判断(pr#1147@Github)
|
||||||
* 【core 】 优化StrUtil中部分参数校验以及逻辑处理(pr#1144@Github)
|
* 【core 】 优化StrUtil中部分参数校验以及逻辑处理(pr#1144@Github)
|
||||||
* 【core 】 简化CreditCode逻辑去除无用Character.toUpperCase(pr#1145@Github)
|
* 【core 】 简化CreditCode逻辑去除无用Character.toUpperCase(pr#1145@Github)
|
||||||
|
* 【core 】 NumberUtil增加generateRandomNumber重载,可自定义seed(issue#I1XTUT@Gitee)
|
||||||
|
|
||||||
### Bug修复
|
### Bug修复
|
||||||
* 【core 】 解决农历判断节日未判断大小月导致的问题(issue#I1XHSF@Gitee)
|
* 【core 】 解决农历判断节日未判断大小月导致的问题(issue#I1XHSF@Gitee)
|
||||||
|
@ -1272,27 +1272,36 @@ public class NumberUtil {
|
|||||||
* @return 随机int数组
|
* @return 随机int数组
|
||||||
*/
|
*/
|
||||||
public static int[] generateRandomNumber(int begin, int end, int size) {
|
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) {
|
if (begin > end) {
|
||||||
int temp = begin;
|
int temp = begin;
|
||||||
begin = end;
|
begin = end;
|
||||||
end = temp;
|
end = temp;
|
||||||
}
|
}
|
||||||
// 加入逻辑判断,确保begin<end并且size不能大于该表示范围
|
// 加入逻辑判断,确保begin<end并且size不能大于该表示范围
|
||||||
if ((end - begin) < size) {
|
Assert.isTrue((end - begin) > size, "Size is larger than range between begin and end!");
|
||||||
throw new UtilException("Size is larger than range between begin and end!");
|
Assert.isTrue(seed.length > size, "Size is larger than seed size!");
|
||||||
}
|
|
||||||
// 种子你可以随意生成,但不能重复
|
|
||||||
int[] seed = new int[end - begin];
|
|
||||||
|
|
||||||
for (int i = begin; i < end; i++) {
|
final int[] ranArr = new int[size];
|
||||||
seed[i - begin] = i;
|
|
||||||
}
|
|
||||||
int[] ranArr = new int[size];
|
|
||||||
Random ran = new Random();
|
|
||||||
// 数量你可以自己定义。
|
// 数量你可以自己定义。
|
||||||
for (int i = 0; i < size; i++) {
|
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];
|
ranArr[i] = seed[j];
|
||||||
// 将最后一个未用的数字放到这里
|
// 将最后一个未用的数字放到这里
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
package cn.hutool.core.util;
|
package cn.hutool.core.util;
|
||||||
|
|
||||||
|
import cn.hutool.core.convert.Convert;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link NumberUtil} 单元测试类
|
* {@link NumberUtil} 单元测试类
|
||||||
@ -269,4 +271,12 @@ public class NumberUtilTest {
|
|||||||
Assert.assertTrue(NumberUtil.isPowerOfTwo(1));
|
Assert.assertTrue(NumberUtil.isPowerOfTwo(1));
|
||||||
Assert.assertFalse(NumberUtil.isPowerOfTwo(17));
|
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