有没有比随机更好的随机函数方法?

问题描述 投票:1回答:2

我在一个数组中有2个字符串。我希望有10%的几率和90%的几率选择另一个。现在我正在使用:

Random random = new Random();
int x = random.nextInt(100 - 1) + 1;
if (x < 10) {
    string = stringArray(0);
} else {
    string = stringArray(1);
}

这是实现这一目标的最佳方式还是有更好的方法?

java random
2个回答
3
投票

我知道在不提交代码的情况下提交堆栈溢出响应通常是一个坏主意,但我真的质疑这个“最好的方法”的问题。人们总是问这个问题,虽然软件中已经建立了设计模式,但是这个问题几乎总是可以通过“它取决于”来回答。

例如,您的模式看起来很好(我可能会添加一些注释)。通过使用1 - 10而不是1 - 100,您可能会获得极小的性能提升,但您需要问自己的事情如下:

  1. 如果我被公共汽车撞到,那么打算在应用程序上工作的人会知道我想要做什么吗?
  2. 如果不直观,我应该写评论。然后我应该问自己,“我可以更改此代码,以便不需要评论吗?”
  3. 是否有现有的库可以解决这个问题?如果是这样,是否批准了FOSS(如适用)/我可以使用吗?
  4. 最终这个代码库的大小是多少?我是否使用微服务,DAO,DTO,Controller,View以及用于验证的不同层来制作完整的程序?
  5. 是否存在解决我的问题的现有惯例(无论是在我的公司还是在一般情况下),还是它足够独特以至于我可以自行解决它?
  6. 这是否符合DRY原则?

我(显然)在堆栈溢出的一个非常小的阵营,并不总是相信解决代码问题的普遍“bests”。请记住,编程与您尝试解决的问题一样困难。

编辑因为人们问,我会这样做:

/*
 * @author  DaveCat
 * @version 1.0
 * @since   2019-03-9 
 * Convenience method that calculates 90% odds of A and 10% odds of B.
 *
 */
    public static String[] calculatesNinetyPercent()
    {
        Random random = new Random();
        int x = random.nextInt(10 - 1 ) + 1
        //Option A
        if(x <= 9) {
            return stringArray(0);
        }
        else
        {
        //Option B
            return stringArray(1);
        }
    }

顺便说一句,初级开发人员在企业级开发中常犯的一个错误就是过多的评论。这有一个javadoc,这可能有点过分,但我认为这是一个方便的方法,你在一个更大的程序中使用。

编辑(再次)

你们让我困惑。 This is how you randomly generate between 2 given numbers in Java


0
投票

一种替代方法是使用0..1之间的随机浮点值并将其与事件的概率进行比较。如果随机值小于概率,则发生事件。

在这个具体的例子中,设置

x
to a random float and compare it to
0.1

我喜欢这种方法,因为它可以用于除百分比整数之外的概率。

© www.soinside.com 2019 - 2024. All rights reserved.