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);
}
这是完成此任务的最佳方法还是有更好的方法?
解决方案
我知道在不提交代码的情况下提交堆栈溢出响应通常是个坏主意,但我确实挑战了“最佳方式”这个问题。人们一直在问这个问题,虽然软件中已经建立了值得了解的设计模式,但这个问题几乎总是可以用“视情况而定”来回答。
例如,您的模式看起来不错(我可能会添加一些评论)。通过使用 1 - 10 而不是 1 - 100,您可能会获得微不足道的性能提升,但您需要问自己以下几点:
- 如果我被公共汽车撞到,将要开发应用程序的人会知道我要做什么吗?
- 如果它不直观,我应该写一个评论。然后我应该问自己,“我可以更改此代码,以便不需要注释吗?”
- 是否有解决此问题的现有库?如果是这样,它是否获得 FOSS 批准(如果适用)/我可以使用它吗?
- 这个代码库的最终规模是多少?我是否正在制作一个包含微服务、DAO、DTO、控制器、视图和不同验证层的完整程序?
- 是否有现有的惯例来解决我的问题(无论是在我的公司还是在一般情况下),还是它足够独特以至于我可以自行解决?
- 这是否遵循 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,这可能是矫枉过正,但我假设这是您在更大的程序中使用的一种方便方法。
编辑(再次)
你们一直让我困惑。这就是您在 Java 中随机生成 2 个给定数字的方式
推荐阅读
- php - 让 libphonenumber 与 autoloader.php 一起工作的问题
- android - 启用 proguard 后 JNI 检测到错误导致应用程序崩溃
- http - 如何定义使用“严格动态”但包含使用“不安全内联”的回退的内容安全策略 (CSP)?
- node.js - 如何在 WebStorm 上使用远程 node_modules(容器内)?
- unity3d - 在先前保存的点云中重新定位
- jsonschema - 如何根据 React Json Schema 表单中的默认值“锁定”字段值?
- git - GitKraken 存储库用户和密码被错误记住
- makefile - Makefile while loop try/catch 相当于先用 conda 然后用 pip 安装 python 依赖项
- regex - 如何在 Zend 框架 3 中从路由中提取特殊字符
- vhdl - VHDL Quartus 无法识别“+”和“-”