相关疑难解决方法(0)

获取范围(x,y)中的随机整数?

可能重复:
Java:生成范围内的随机数

如何生成随机整数i,i属于(0,10]

我试着用这个:

Random generator = new Random();
int i = generator.nextInt(10);
Run Code Online (Sandbox Code Playgroud)

但它给了我两者之间的价值[0,10).

但就我而言,我需要它们(0,10].

java random

37
推荐指数
3
解决办法
14万
查看次数

具有给定长度的Java随机数

我需要在Java中使用正好6位的随机数进行生成.我知道我可以在一个随机数上循环6次但是在标准Java SE中有没有其他方法可以做到这一点?

编辑 - 跟进问题:

现在,我可以生成我的6位数,我遇到了一个新问题,我正在尝试创建的整个ID是语法123456-A1B45.那么我如何随机化最后5个可以是AZ或0-9的字符?我正在考虑使用char值和randomice一个介于48 - 90之间的数字,并简单地删除任何获得代表58-64的数字的值.这是要走的路还是有更好的解决方案?

编辑2:

这是我的最终解决方案.谢谢你所有的帮助!

protected String createRandomRegistryId(String handleId)
{
    // syntax we would like to generate is DIA123456-A1B34      
    String val = "DI";      

    // char (1), random A-Z
    int ranChar = 65 + (new Random()).nextInt(90-65);
    char ch = (char)ranChar;        
    val += ch;      

    // numbers (6), random 0-9
    Random r = new Random();
    int numbers = 100000 + (int)(r.nextFloat() * 899900);
    val += String.valueOf(numbers);

    val += "-";
    // char or numbers (5), random 0-9 A-Z
    for(int …
Run Code Online (Sandbox Code Playgroud)

java random

36
推荐指数
4
解决办法
14万
查看次数

如何在Java中生成随机的正数和负数

我试图在原始数据类型short的范围(-32768,32767)上生成随机整数.java Random对象仅生成正数.如何在该间隔内随机创建数字?谢谢.

java random numbers

29
推荐指数
3
解决办法
10万
查看次数

从Java 8开始有没有理由写`new Random()`?

出于某种原因,我常想,java.util.Random是线程安全的,一拉HashMapBitSet,并且Math.random()被实现为包装访问Randomsynchronized块,或ThreadLocalRandom.current().nextDouble().

实际上事实证明它java.util.Random是线程安全的(通过原子).因此需要注意的是:即使我需要在单个线程中使用一些随机输入,使用ThreadLocalRandom也是有意义的,因为内部没有原子读写,编译为锁定指令并发出内存屏障.

而且,由于Java 8 ThreadLocalRandom本质上是一个单例,它的状态保存在某些java.lang.Thread类的字段中.因此,方法ThreadLocalRandom.current()不是访问ThreadLocalMap,而只是静态字段读取,即非常便宜.

我有两个问题:

  1. 从计算机科学的角度来看,几个线性同余随机生成器(以ThreadLocalRandoms 的方式初始化)的输出是否与单个线性同余随机生成器(java.util.Random实例)的输出相同"随机" ?

  2. 如果回答的第一个问题是肯定的,是否有任何理由写的建设new Random()(不含种子)来代替ThreadLocalRandom.current(),永远不会消失?

更新.我应该调用像ThreadLocalRandom.current().ints().parallel().collect(...)可能是不正确的,因为线程的随机数生成器的状态可能中未初始化ForkJoinPool的工作线程,但看起来,ThreadLocalRandom覆盖方法ints(),longs()以及doubles(),使得上述结构正确.

java random java-8

28
推荐指数
1
解决办法
3073
查看次数

包含范围内的随机浮点双

我们可以很容易地得到所需范围内的随机浮点数[X,Y)(注意X是包含的,Y是独占的),下面列出了函数,因为Math.random()(大多数伪随机数生成器,AFAIK)产生的数字在[0,1):

function randomInRange(min, max) {
  return Math.random() * (max-min) + min;
}
// Notice that we can get "min" exactly but never "max".
Run Code Online (Sandbox Code Playgroud)

我们怎样才能得到一个包含两个边界的期望范围内的随机数,即[X,Y]

我想我们可以Math.random()通过"滚动" IEE-754浮点双精度的位来"增加"我们的值(或等效),将最大可能值精确地设置为1.0,但这似乎很难实现,特别是语言不适合比特操纵.有没有更简单的方法?

(顺便说一句,为什么随机数生成器会产生数字[0,1)而不是[0,1]?)

[编辑]请注意,我没有要这样做,我完全清楚这种区别是迂腐的.只是好奇并希望得到一些有趣的答案.如果这个问题不合适,请随意投票结束.

javascript c language-agnostic random

26
推荐指数
4
解决办法
2万
查看次数

为Random.nextInt()指定max和min?

可能重复:
Java:生成范围内的随机数

我想在逻辑范围内生成一个随机int.所以,比如说,我正在编写一个程序来"滚动"具有指定数量边的骰子.

public int rollDice() {
     Random generator = new Random();
     return generator.nextInt(sides);
}

现在的问题变成,这将返回值两侧和零之间的包容性,这是没有意义的,因为大多数的骰子从1到6,9,等等.所以,我怎么可以指定nextInt应该在1和侧面的数量之间的合作?

java random

14
推荐指数
1
解决办法
4万
查看次数

如何生成随机的五位数Java

可能重复:
Java:生成范围内的随机数

我需要一些帮助.

我将使用什么代码创建一个5位数的随机数,并以1或2开头?

为了用作公司员工ID.

谢谢!!

java random

14
推荐指数
1
解决办法
4万
查看次数

获取java中特定范围内的随机数

可能重复:
Java:生成范围内的随机数

我想使用生成随机数

java.util.Random(arg);
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,该方法只能接受一个参数,因此该数字始终在0和我的参数之间.有没有办法在(比方说)200和500之间生成随机数?

java random

13
推荐指数
2
解决办法
5万
查看次数

如何在java中生成4位数的随机长度?

如何使用java中的随机类生成[0000,9999](含)范围内的long?长度必须是4位数.

java random

9
推荐指数
2
解决办法
3万
查看次数

生成具有指定位数Java的随机整数

我今天遇到了这个问题,我确信有一个我没想到的优雅解决方案.

假设我想在Java中生成一个具有指定位数的随机整数(或长整数),其中这个位数可以改变.

即将多个数字传递给方法,并返回具有指定位数的随机数

例)N = 3,产生100-999之间的随机数; N = 4,生成1000-9999之间的随机数

private long generateRandomNumber(int n){

/*Generate a random number with n number of digits*/

}
Run Code Online (Sandbox Code Playgroud)

到目前为止我的尝试(这有效,但看起来很乱)

private long generateRandomNumber(int n){

    String randomNumString = "";

    Random r = new Random();

    //Generate the first digit from 1-9
    randomNumString += (r.nextInt(9) + 1);

    //Generate the remaining digits between 0-9
    for(int x = 1; x < n; x++){
        randomNumString += r.nextInt(9);
    }

    //Parse and return
    return Long.parseLong(randomNumString);

}
Run Code Online (Sandbox Code Playgroud)

有没有比这更好/更有效的解决方案?

*有很多解决方案可以在指定的范围内生成随机数,我对给定一定数量的数字生成随机数的最佳方法更加好奇,并且使解决方案足够强大以处理任意数量的数字.

我不想传递最小值和最大值,而只需要传递所需的位数

java random

8
推荐指数
2
解决办法
4943
查看次数

标签 统计

random ×10

java ×9

c ×1

java-8 ×1

javascript ×1

language-agnostic ×1

numbers ×1