【问题标题】:Java Generate Random Number Between Two Given Values [duplicate]Java在两个给定值之间生成随机数[重复]
【发布时间】:2011-07-13 09:32:38
【问题描述】:

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

我可以使用以下内容生成一个随机数:

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(含)之间的随机数?

【问题讨论】:

    标签: java random numbers


    【解决方案1】:

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

    对于更通用的“在两个数字之间”,请使用:

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

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

    【讨论】:

    • 谢谢 - 我已经尝试过了,但它似乎不起作用。我正在使用从 0 到 100(含)的随机数来填充多维数组;尝试此操作时,它会用极大和极小的数字填充数组。例如,-3.76556749E8 3.0207573E8 2.033182079E9 -6.86227134E8。
    • 显示其余代码。例如什么a.
    • 您能否发布您如何调用r.nextInt() 以及使用哪些值?
    • @Thomas Random r = new Random(); System.out.println(r.nextInt(High - Low) + Low);
    • 关于 Java 命名约定,变量名应以小写字符开头
    【解决方案2】:

    使用Random.nextInt(int)

    在你的情况下,它看起来像这样:

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

    【讨论】:

      【解决方案3】:
      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*/
      

      【讨论】:

      • 可能有点晚了,它总是与意见和代码风格绑定,但通常你不会创建一个大写的变量,所以将它命名为“随机”而不是“更好”随机的”。类通常使用大写 :)
      • 如果 max 为 Integer.MAX_VALUE 且 min 为 0,这将失败。使用 Math.round 而不是强制转换为 int 来解决这个问题。
      • 关于 Java 命名约定,变量名应以小写字符开头
      【解决方案4】:

      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 之间。

      【讨论】:

        【解决方案5】:

        也可以试试下面的:

        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." );
                }                     
            }
        }
        

        【讨论】:

        • 有点冗长和笨拙。您不需要重复该代码,只需决定是先获取 n1 还是 n2 的值。
        • 关于 Java 命名约定,变量名应以小写字符开头
        【解决方案6】:

        假设上限是上限,下限是下限,那么您可以在两个边界之间生成一个随机数 r:

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

        【讨论】:

        • 这是upper独有的
        • int r = (Math.random() * (upper - lower)) + lower;它将是包容性的。这可能会有所帮助。
        【解决方案7】:

        这样,

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

        【讨论】:

          猜你喜欢
          • 2023-04-01
          • 2014-03-20
          • 2014-12-19
          • 2014-04-17
          • 1970-01-01
          • 1970-01-01
          • 2019-10-18
          • 2013-06-04
          • 1970-01-01
          相关资源
          最近更新 更多