产生多个范围之间的随机数(Generating a random number between mu

2019-08-17 22:25发布

我知道如何做一个随机数是两个数字之间:

1 + (int)(Math.random() * ((10 - 1) + 1))

要么

Min + (int)(Math.random() * ((Max - Min) + 1))

但我怎么去产生哪些属于多个范围的随机数?

例如:数量可以为50至60是1之间,以10或

Answer 1:

我会像这样的东西去,让尽可能你喜欢你,让更多范围内做到这一点:

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

class RandomInRanges
{
    private final List<Integer> range = new ArrayList<>();

    RandomInRanges(int min, int max)
    {
        this.addRange(min, max);
    }

    final void addRange(int min, int max)
    {
        for(int i = min; i <= max; i++)
        {
            this.range.add(i);
        }
    }

    int getRandom()
    {
        return this.range.get(new Random().nextInt(this.range.size()));
    }

    public static void main(String[] args)
    {
        RandomInRanges rir = new RandomInRanges(1, 10);
        rir.addRange(50, 60);
        System.out.println(rir.getRandom());
    }
}


Answer 2:

第一产生1和20之间的整数。然后,如果该值高于10,映射到所述第二时间间隔。

Random random = new Random();

for (int i=0;i<100;i++) {
    int r = 1 + random.nextInt(60-50+10-1);
    if (r>10) r+=(50-10);
    System.out.println(r);      
}


Answer 3:

首先,你需要知道有多少数字是每个范围。 (我假设你是从一个离散选择范围的整数,从一个连续范围,不是真实值)在您的例子中,有10个整数中的第一个范围,并在第11秒。 这意味着10/21倍,你应该从第一范围选择,而11/21次从第二选择。 在伪代码

x = random(1,21)
if x in 1..10
   return random(1,10)
else
   return random(50,60)


Answer 4:

如果列表被称为我认为你可以使用这样的事情。

public class Test
{
    public static void main(String[] args)
    {
        int a;
       for(int i=0;i<10;i++)
      {
            a=(int) (Math.random()*((10-0)+(60-50)));

            if(a<=10)
            {

            }
            else if(a>(60-50))
            {
                a=a+50;
        }
            System.out.println(a);
       }
    }
}


Answer 5:

如何以下方法:随机挑选的范围内使用该范围generage您的随机数,对于你必须把你的范围在某些列表或数组

public class RandomRangeGenerator {

    class Range {
        public int min, max;
        public Range(int min, int max) { this.min = min; this.max = max; }
    }

    @Test
    public void generate() {
        List<Range> ranges = new ArrayList<>();
        ranges.add(new Range(1, 10));
        ranges.add(new Range(50, 60));
        List<Integer> randomNumbers = generateRandomNumbers(ranges, 10);
        System.out.println(randomNumbers.toString());
        for(Integer i : randomNumbers) {
            Assert.assertTrue((i >= 1 && i <= 10) || (i >= 50 && i <= 60));
        }
    }

    private List<Integer> generateRandomNumbers(List<Range> ranges, int numberOfNumbers) {
        List<Integer> randomNumbers = new ArrayList<>(numberOfNumbers+1);
        while(numberOfNumbers-- > 0) {
            Range range = ranges.get(new Random().nextInt(ranges.size()));
            randomNumbers.add(range.min + (int)(Math.random() * ((range.max - range.min) + 1)));
        }
        return randomNumbers;
    }
}


文章来源: Generating a random number between multiple ranges