如何在java中生成min和max之间的随机整数?

时间:2010-03-14 22:20:47

标签: java random

什么方法在min和max之间返回一个随机int?或者不存在这样的方法吗?

我正在寻找的是这样的:

NAMEOFMETHOD (min, max) 

(其中min和max为int s)

返回如下内容:

8

(随机)

如果确实存在这样的方法,请将您的答案链接到相关文档。谢谢。

更新:尝试在nextInt答案中实现完整解决方案我有这个:

class TestR
{
    public static void main (String[]arg) 
    {   
        Random random = new Random() ;
        int randomNumber = random.nextInt(5) + 2;
        System.out.println (randomNumber) ; 
    } 
} 

我仍然从编译器中得到同样的错误:

TestR.java:5: cannot find symbol
symbol  : class Random
location: class TestR
        Random random = new Random() ;
        ^
TestR.java:5: cannot find symbol
symbol  : class Random
location: class TestR
        Random random = new Random() ;
                            ^
TestR.java:6: operator + cannot be applied to Random.nextInt,int
        int randomNumber = random.nextInt(5) + 2;
                                         ^
TestR.java:6: incompatible types
found   : <nulltype>
required: int
        int randomNumber = random.nextInt(5) + 2;
                                             ^
4 errors

这里出了什么问题?

8 个答案:

答案 0 :(得分:121)

在应用程序启动时构造一个Random对象:

Random random = new Random();

然后使用Random.nextInt(int)

int randomNumber = random.nextInt(max + 1 - min) + min;

请注意,下限和上限均包含在内。

答案 1 :(得分:16)

您可以使用Random.nextInt(n)。这会在[0,n)中返回一个随机int。只需使用max-min + 1代替n并将min添加到答案中,就会得到所需范围内的值。

答案 2 :(得分:5)

public static int random_int(int Min, int Max)
{
     return (int) (Math.random()*(Max-Min))+Min;
}

random_int(5, 9); // For example

答案 3 :(得分:4)

由于上面的解决方案没有考虑max-min为负时执行min的可能溢出,这里是另一种解决方案(类似于kerouac的解决方案)

public static int getRandom(int min, int max) {
    if (min > max) {
        throw new IllegalArgumentException("Min " + min + " greater than max " + max);
    }      
    return (int) ( (long) min + Math.random() * ((long)max - min + 1));
}

即使你用以下方式调用它也可以。

getRandom(Integer.MIN_VALUE, Integer.MAX_VALUE) 

答案 4 :(得分:0)

使用Random类是接受答案中建议的方法,但如果你不想创建一个新的Random对象,这是一种不太直接的正确方法:

min + (int) (Math.random() * (max - min + 1));

答案 5 :(得分:0)

使用Java 7或更高版本,您可以使用

ThreadLocalRandom.current().nextInt(int origin, int bound)

Javadoc:ThreadLocalRandom.nextInt

答案 6 :(得分:-2)

这会生成一个大小为psize的随机整数

public static Integer getRandom(Integer pSize) {

    if(pSize<=0) {
        return null;
    }
    Double min_d = Math.pow(10, pSize.doubleValue()-1D);
    Double max_d = (Math.pow(10, (pSize).doubleValue()))-1D;
    int min = min_d.intValue();
    int max = max_d.intValue();
    return RAND.nextInt(max-min) + min;
}

答案 7 :(得分:-5)

import java.util.Random;