Java生成在给定两个值之间的随机数

223
我想知道如何在两个给定值之间生成随机数。

我可以使用以下方法生成随机数:
Random r = new Random();

for(int i = 0; i < a.length; i++){
    for(int j = 0; j < a[i].length; j++){
        a[i][j] = r.nextInt();
    }

}

然而,我该如何生成一个介于0和100(包括0和100)之间的随机数?

7个回答

541

你可以使用例如 r.nextInt(101)

如果需要更通用的“在两个数字之间”,可以使用:

Random r = new Random();
int low = 10;
int high = 100;
int result = r.nextInt(high-low) + low;

这会给你一个介于10(包含)和100(不包含)之间的随机数。


1
谢谢 - 我已经尝试过了,但似乎不起作用。我正在使用从0到100(包括)的随机数来填充一个多维数组;当尝试这样做时,它会用极大和极小的数字填充数组。例如,-3.76556749E8 3.0207573E8 2.033182079E9 -6.86227134E8。 - Mus
显示代码的剩余部分。例如 a 是什么? - Erik
1
你能分享一下你是如何调用 r.nextInt() 以及使用了哪些值吗? - Thomas
@Thomas 随机数 r = new 随机数(); 系统.打印(r.下一个整数(高 - 低) + 低); - SnakeDoc
1
关于Java命名规范,变量名应以小写字母开头。 - Jens
显示剩余3条评论

67

假设上限是上界,下限是下界,那么你可以使用以下公式生成两者之间的随机数r:

int r = (int) (Math.random() * (upper - lower)) + lower;

2
这是专属于上界的。 - Rizon
2
int r = (Math.random() * (upper - lower)) + lower; 这将包括下限。这可能会有所帮助。 - Farruh Habibullaev

18
int Random = (int)(Math.random()*100);

如果您需要生成多个值,则只需使用for循环即可。

 for (int i = 1; i <= 10 ; i++)
       {
        int Random = (int)(Math.random()*100);
        System.out.println(Random);
       }

如果您想指定一个更好的范围,比如从10到100(两者都在此范围内)

那么代码应该是:

   int Random =10 +  (int)(Math.random()*(91));
   /* int Random = (min.value ) + (int)(Math.random()* ( Max - Min + 1));
  *Where min is the smallest value You want to be the smallest number possible to       
  generate and Max is the biggest possible number to generate*/

4
可能有点晚了,而且这通常涉及到意见和代码风格,但通常不会用大写字母来创建变量,因此将其命名为"random"而不是"Random"可能会更好。类通常使用大写字母 :) - Stefan Schouten
在max为Integer.MAX_VALUE且min为0的情况下,这种方法会失败。使用Math.round而不是强制转换为int来解决这个问题。 - Krease
关于Java命名规范,变量名应以小写字母开头。 - Jens

8

像这样,

Random random = new Random();
int randomNumber = random.nextInt(upperBound - lowerBound) + lowerBound;

2

使用Random.nextInt(int)方法。

在你的情况下,代码可能如下所示:

a[i][j] = r.nextInt(101);

2

Java中没有像Python那样在两个值之间生成随机数的随机数生成器。实际上,它只需要一个值来生成随机数。因此,您需要将生成的数字加上一个特定的数字,这将使数字处于一个范围内。例如:

package RandGen;

import java.util.Random;

public class RandGen {


    public static Random numGen =new Random();

public static int RandNum(){
    int rand = Math.abs((100)+numGen.nextInt(100));

    return rand;
}

public static void main(String[]Args){
   System.out.println(RandNum());
}

这个程序的功能完全在第6行(以“int rand…”开头的那一行)。请注意,Math.abs()仅将数字转换为绝对值,并声明为int类型,这并不重要。第一个数字(100)是我添加到随机数中的数字。这意味着新输出的数字将是随机数+100。 numGen.nextInt()是随机数本身的值,因为我将(100)放在它的括号中,所以它是1到100之间的任何数字。因此,当我添加100时,它变成了101到200之间的数字。您实际上并没有生成100和200之间的数字,而是添加到1到100之间的数字上。


1

还可以尝试以下方法:

public class RandomInt { 
    public static void main(String[] args) { 

        int n1 = Integer.parseInt(args[0]);
        int n2 = Integer.parseInt(args[1]);
        double Random;

        if (n1 != n2)
        {
            if (n1 > n2)
            {
                Random = n2 + (Math.random() * (n1 - n2));
                System.out.println("Your random number is: " + Random);
            }
            else
            {
                Random = n1 + (Math.random() * (n2 - n1));   
                System.out.println("Your random number is: " +Random);
            }
        } else {
            System.out.println("Please provide valid Range " +n1+ " " +n2+ " are equal numbers." );
        }                     
    }
}

3
说得有点啰嗦,不太简洁明了。你不需要重复那段代码,只需要决定先使用n1还是n2的值就可以了。 - itsbruce
1
关于Java命名规范,变量名应以小写字母开头。 - Jens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接