【问题标题】:How to generate random numbers with specific interval between every random number如何生成每个随机数之间具有特定间隔的随机数
【发布时间】:2016-01-28 17:34:57
【问题描述】:

我正在尝试在范围之间生成 8 个随机数,例如 1 到 100。我生成得很好,但我需要生成具有特定差异的随机数,所有生成的随机数和两个最小最大范围值都被排除在外。假设从 1 到 100,我必须生成 2、12、22、32、42、52、62、72 的数字。无论如何我可以生成这样的随机数。

提前致谢。

【问题讨论】:

  • 第一个数字生成后不是随机的。只需继续添加10 并存储即可。
  • 如果它们之间有特定的间隔,那么只有第一个数字是随机的。其他的本来就是第一个数字加上n*interval。在您的示例中:2(随机)、2+(1*10) = 122+(2*10) = 222+(3*10) = 32...
  • @Haris 可以告诉我如何在生成随机数时同时排除最小值和最大值,即 1 和 100
  • @AlmightyR 我错过了一些陈述还有一件事是我不知道间隔我只知道最大范围假设如果它的 100 间隔是 10,如果它的 1000 间隔会像 100 等等..有什么办法可以实现吗?
  • 你能把你写的代码贴出来吗?这将帮助我们了解您来自哪里。 stackoverflow.com/help/how-to-ask如果有帮助也别忘了采纳哦!

标签: java sorting random


【解决方案1】:

您可以尝试生成一个随机数,然后将初始值添加到输出中。我改编了 http://www.javapractices.com/topic/TopicAction.do?Id=62 的一个例子来解决你的问题。

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        int ini = 1;
        int end = 100;
        Random random = new Random();
        for (int i = 0; i < 8; i++){
            // for this particular example we must add one to ini
            // so that ini is excluded from the output
            generateRandomInt(ini + 1, end, random);
        }
    }

    private static void generateRandomInt(int ini, int end, Random random){
        int range,randomInt,randomNumber;
        range = end - ini;
    randomInt = random.nextInt(range);
        randomNumber =  randomInt + ini;    
        System.out.println("Generated : " + randomNumber);      
    }
}

【讨论】:

  • 但是你不需要所有数字之间的固定间隔吗?
  • @Ian Mc 是的,间隔需要根据给定的范围来固定,关于如何实现这个逻辑来决定范围的任何想法。
  • 您可以通过更改示例中的 ini 和 end 整数来更改间隔
【解决方案2】:

在提供的示例中,N=100,随机数的数量 R=8,间隔 V=10。序列以 F(第一个数字,这是随机的)开始。

序列为 F, F+V, F+2*V, ... F+(R-1)*V

这个序列占用空间 S = (R-1)*V+1 空间。在此示例中,范围为 2 到 72,或 S=71。

您还要求排除 mix 和 max(1 和 100)。

所以剩下的允许随机空间 L = N - S - 2 = 27。

所以 F 变成 1 到 27 之间的随机数,然后加一来避免最小值。

一旦你有 F,顺序就会随之而来。

编辑:如果没有提供,您也可以随机计算 V(参见 S 的公式;V 来自知道 N 和 R)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 2021-10-13
    • 2019-05-31
    • 2021-11-22
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多