我的数组中有 2 个字符串。我希望有 10% 的机会选择其中之一,90% 的机会选择另一个。现在我正在使用:
Random random = new Random();
int x = random.nextInt(100 - 1) + 1;
if (x < 10) {
string = stringArray(0);
} else {
string = stringArray(1);
}
这是实现此目的的最佳方法还是有更好的方法?
最佳答案
我知道在不提交代码的情况下提交堆栈溢出响应通常是一个坏主意,但我确实对“最佳方法”这个问题提出了质疑。人们总是问这个问题,尽管软件中存在值得了解的既定设计模式,但这个问题几乎总是可以用“视情况而定”来回答。
例如,您的模式看起来不错(我可能会添加一些评论)。通过使用 1 - 10 而不是 1 - 100,您可能会获得微小的性能提升,但您需要问自己以下问题:
- 如果我被公交车撞了,负责该应用程序的人员会知道我想做什么吗?
- 如果不直观,我应该写一条评论。然后我应该问自己,“我可以更改此代码以便不需要注释吗?”
- 是否有现有的库可以解决这个问题?如果是这样,它是否被 FOSS 批准(如果适用)/我可以使用它吗?
- 这个代码库最终的大小是多少?我是否正在制作一个包含微服务、DAO、DTO、 Controller 、 View 和不同验证层的完整程序?
- 是否有现有的惯例可以解决我的问题(无论是在我的公司还是一般情况下),或者它是否足够独特,我可以对此采取自己的看法?
- 这是否遵循 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
关于java - 除了 Random 之外,还有更好的随机化函数的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55048756/