除了Random,还有一种更好的方法来使函数随机化吗?

时间:2019-03-07 16:37:15

标签: java random

我在数组中有2个字符串。我希望选择一个的机会为10%,选择另一个的机会为90%。现在我正在使用:

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

这是完成此任务的最佳方法还是有更好的方法?

2 个答案:

答案 0 :(得分:3)

我知道在不提交代码的情况下提交堆栈溢出响应通常是一个坏主意,但我确实对“ 最佳方式”这一问题提出了质疑。人们一直在问这个问题,尽管在软件中已经建立了值得一提的设计模式,但这个问题几乎总是可以用“取决于”来回答。

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

  1. 如果我被公交车撞到了,将要在应用程序上工作的人会知道我想做什么吗?
  2. 如果不直观,我应该写一条评论。然后我应该问自己:“我可以更改此代码,以使不需要注释吗?”
  3. 是否存在可以解决此问题的库?如果是这样,是否获得FOSS批准(如果适用)/我可以使用它吗?
  4. 此代码库的最终大小将是多少?我是否在编写包含微服务,DAO,DTO,控制器,视图和不同层的完整程序以进行验证?
  5. 是否存在解决我的问题的约定(无论是在公司还是在一般情况下),或者它是否足够独特以至于我可以自行解决?
  6. 这是否遵循DRY原则?

(显然)我处于堆栈溢出的一个很小的阵营,它并不总是相信解决代码问题的通用“最佳方法”。请记住,编程仅与您要解决的问题一样困难。

编辑 自从有人问起,我就会这样:

/*
 * @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

答案 1 :(得分:0)

一种选择是使用一个介于0..1之间的随机浮点值,并将其与事件的可能性进行比较。如果随机值小于概率,则事件发生。

在此特定示例中,将

x
设置为随机浮点并将其与
0.1

进行比较

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