java - 搜索特定范围内的最大值和最小值 - 随机
问题描述
到目前为止,程序中的值是随机搜索的,但我想修改程序以搜索给定范围内的随机数。一般来说,我的观点是抽签应该是从给定的范围(从到到),而不是像上面的代码那样最多 1000 个随机数,所以我的问题是:
如何将值从随机传递到随机:rand.nextInt (?),以便在给定范围内随机绘制数字。所以我通常需要像问题中那样从程序中获取打印输出:预期输出
// Create array to be searched
final int[] arrayToSearch = new int[20];
Random rnd = new Random();
for (int i = 0; i < arrayToSearch.length; i++)
arrayToSearch[i] = rnd.nextInt(1000);
System.out.println(Arrays.toString(arrayToSearch));
final int PARTITIONS = 4;
Thread[] threads = new Thread[PARTITIONS];
final int[] partitionMin = new int[PARTITIONS];
final int[] partitionMax = new int[PARTITIONS];
for (int i = 0; i < PARTITIONS; i++) {
final int partition = i;
threads[i] = new Thread(new Runnable() {
@Override
public void run() {
// Find min/max values in sub-array
int from = arrayToSearch.length * partition / PARTITIONS;
int to = arrayToSearch.length * (partition + 1) / PARTITIONS;
int min = Integer.MAX_VALUE,
max = Integer.MIN_VALUE;
for (int j = from; j < to; j++) {
min = Math.min(min, arrayToSearch[j]);
max = Math.max(max, arrayToSearch[j]);
}
partitionMin[partition] = min;
partitionMax[partition] = max;
});
至今:
partition 0: from=0, to=5, min=23, max=662 //the draw in the range 0-5, draw is outside the specified range
预期输出:
partition 1: from=0, to=5, min=1, max=3 // the draw takes place within the given range 0 to 5
partition 2: from=20, to=30, min=22, max=29 //the draw takes place within the given range 20 to 30
解决方案
如何将值从随机传递到随机:rand.nextInt (?) 以便在给定范围内随机绘制数字
像这样试试。这将产生介于from
和to
包容之间的值。
int from = -100;
int to = 100;
int draw = ThreadLocalRandom.current().nextInt(from, to);
您实际上可以生成自己的Supplier
来获取指定范围内的随机数。
BiFunction
返回Supplier
一个。并且Supplier
可以调用
以获取范围内的随机数。
BiFunction<Integer, Integer, IntSupplier> rndGen = (f,
t) -> () -> ThreadLocalRandom.current().nextInt(f, t+1);
IntSupplier rnd = rndGen.apply(from,to);
所以每次rnd.getAsInt()
调用,你都会得到一个在所需范围内的数字。
注意:当然有一些方法可以自动执行此操作。但我假设你想自己找出找到最小值和最大值的逻辑,所以我没有包括这些。
推荐阅读
- java - UNIX 无法读取 MyBatis 资源文件
- unit-testing - 在单元测试控制器 NestJs 中上传模拟文件
- ios - 如何将嵌套节点从 Firebase 实时数据库检索到 iOS 应用程序
- c++ - 为什么我的程序在使用 -fsanitize=leak 时不会停止?
- sql - 等待 x 秒后重试 SQL UPDATE 查询
- java - java - 如何在Java Swing中为非空布局组件设置绝对位置?
- spring - Spring Data JPA,如何将一个属性映射到两列?
- yaml - OpenAPI YAML 描述中的 |、> 和 >- 有什么区别?
- elasticsearch - 在 SSR 应用程序中使用 `@elastic/app-search-javascript` 会引发 Headers not defined 错误
- ebean - 具有单向 OneToMany 关系的 Ebean 在插入期间导致重复列异常