简体   繁体   中英

Generate a random number or null

I want to generate a random number or null. So lets say i have the option to fill in a number or leave a field blank (null) and now i wna tot generate one of the two. Generating a random number is easy using the Random class but i'm not sure how to let mij function return null occasionally. I hope someone has a good idea in stead of always return null if the number generated is divisable through lets say 3 or another static number. the number that are generated will be used for indexes of arrays and the arrays are reasonably small. Lets say between 2 and 10 items.

User for example a negative one for null. Maybe like this:

Random r = new Random();
int? randomNumber;

randomNumber = r.Next(-1, 3); //put whatever range you want in here from negative to positive
            
if(randomNumber == -1)
{
    randomNumber = null;
}

Following my comment above, I would suggest you generate a first random number between n options (based on how many odds you want the number to be null) and based on that outcome, decide to return null or a random number.

The function since can return a nullable int, must declare the type as nullable using int? .

this is an example using that strategy:

private void caller(){
    Random rnd = new Random();
    //generate 100 random numbers from a caller
    for(int i=0;i<100;i++)
        this.getNumber(rnd);
}    

private int? getNumber(Random rnd, int oddsOfBeingNull = 2){
    int nullOrNumber  = rnd.Next(1, oddsOfBeingNull);
    //if it's == 1, return null
    if(nullOrNumber == 1)
      return null;
    //else return a random number between 1-100
    return rnd.Next(1, 100);        
}

}

This is a special edge case. The null scenario you wish to add to the possible results is something you will have to define its probability. I think it is reasonable and quite easy to pre-define a range for which you will return null to the user. Define this range based on the desired probability and add a simple range check after querying the random function. something like this:

private double? Random()
{
    var r = new Random();
    var result = r.NextDouble();
    if (result > 0.9)
        return null;
    return result;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM