Math.random() explanation

后端 未结 5 1464
一个人的身影
一个人的身影 2020-11-22 07:02

This is a pretty simple Java (though probably applicable to all programming) question:

Math.random() returns a number between zero and on

相关标签:
5条回答
  • 2020-11-22 07:29

    Here's a method which receives boundaries and returns a random integer. It is slightly more advanced (completely universal): boundaries can be both positive and negative, and minimum/maximum boundaries can come in any order.

    int myRand(int i_from, int i_to) {
      return (int)(Math.random() * (Math.abs(i_from - i_to) + 1)) + Math.min(i_from, i_to);
    }
    

    In general, it finds the absolute distance between the borders, gets relevant random value, and then shifts the answer based on the bottom border.

    0 讨论(0)
  • 2020-11-22 07:32

    The Random class of Java located in the java.util package will serve your purpose better. It has some nextInt() methods that return an integer. The one taking an int argument will generate a number between 0 and that int, the latter not inclusive.

    0 讨论(0)
  • 2020-11-22 07:33

    To generate a number between 10 to 20 inclusive, you can use java.util.Random

    int myNumber = new Random().nextInt(11) + 10
    
    0 讨论(0)
  • 2020-11-22 07:46
    int randomWithRange(int min, int max)
    {
       int range = (max - min) + 1;     
       return (int)(Math.random() * range) + min;
    }
    

    Output of randomWithRange(2, 5) 10 times:

    5
    2
    3
    3
    2
    4
    4
    4
    5
    4
    

    The bounds are inclusive, ie [2,5], and min must be less than max in the above example.

    EDIT: If someone was going to try and be stupid and reverse min and max, you could change the code to:

    int randomWithRange(int min, int max)
    {
       int range = Math.abs(max - min) + 1;     
       return (int)(Math.random() * range) + (min <= max ? min : max);
    }
    

    EDIT2: For your question about doubles, it's just:

    double randomWithRange(double min, double max)
    {
       double range = (max - min);     
       return (Math.random() * range) + min;
    }
    

    And again if you want to idiot-proof it it's just:

    double randomWithRange(double min, double max)
    {
       double range = Math.abs(max - min);     
       return (Math.random() * range) + (min <= max ? min : max);
    }
    
    0 讨论(0)
  • 2020-11-22 07:47

    If you want to generate a number from 0 to 100, then your code would look like this:

    (int)(Math.random() * 101);
    

    To generate a number from 10 to 20 :

    (int)(Math.random() * 11 + 10);
    

    In the general case:

    (int)(Math.random() * ((upperbound - lowerbound) + 1) + lowerbound);
    

    (where lowerbound is inclusive and upperbound exclusive).

    The inclusion or exclusion of upperbound depends on your choice. Let's say range = (upperbound - lowerbound) + 1 then upperbound is inclusive, but if range = (upperbound - lowerbound) then upperbound is exclusive.

    Example: If I want an integer between 3-5, then if range is (5-3)+1 then 5 is inclusive, but if range is just (5-3) then 5 is exclusive.

    0 讨论(0)
提交回复
热议问题