java从两个数字中随机选取一个数字
我有两个整数
int a = 35:
int b = 70;
我想在运行时随机选择其中一个变量,然后分配给另一个变量。即
int c = a or b:
我想到的一种方法是用这两个整数创建一个数组,然后找到一个介于0和1之间的随机整数,并将其用作数组的索引以获得数字
或者将布尔值随机化,并在if-else中使用它
我的问题是,有没有更好、更有效的方法来实现这一点?也就是说,从两个之前定义的整数中选择一个数字
你可以在下面搜索框中键入要查询的问题!
我有两个整数
int a = 35:
int b = 70;
我想在运行时随机选择其中一个变量,然后分配给另一个变量。即
int c = a or b:
我想到的一种方法是用这两个整数创建一个数组,然后找到一个介于0和1之间的随机整数,并将其用作数组的索引以获得数字
或者将布尔值随机化,并在if-else中使用它
我的问题是,有没有更好、更有效的方法来实现这一点?也就是说,从两个之前定义的整数中选择一个数字
# 1 楼答案
您要求更有效的解决方案有什么具体原因吗?除非此功能位于某个非常紧密的内部循环中(例如在光线跟踪器中),否则您可能试图过早地优化代码
如果希望避免使用数组,并且不喜欢If语句的“膨胀”,则可以使用三元选择运算符在两者之间进行选择:
其中
random
是java.util.Random
的一个实例。您可以将该实例存储为类中的final static
字段以重用它如果您不需要真正的随机性,只想在给定代码块的每次调用中在两个数字之间切换,那么只需存储一个
boolean
并切换它即可:由于我不能对其他答案发表评论,我想指出一些其他答案的一个问题,这些答案建议在更大范围内生成一个随机整数,并根据结果是奇数还是偶数,或者它是否小于或大于中间值来做出决定。这实际上与生成0到1之间的随机整数完全相同,只是过于复杂。在-2^31和(2^31)-1之间随机生成的整数上使用
nextInt(n)
方法uses the modulo operator,这基本上就是你最终要做的事情,只要使用n = 2
如果您使用的是标准库方法,比如
Collections.shuffle()
,那么同样会使事情过于复杂,因为标准库使用标准库的随机数生成器请注意,所有的建议(到目前为止)都比我简单的
nextBoolean()
建议效率低,因为它们需要不必要的方法调用和算法# 2 楼答案
您只需使用安全随机生成器(
java.security.SecureRandom
)有关更多信息,请参阅此链接information
# 3 楼答案
将一个介于1和10之间的整数随机化,如果它大于5,则取b的值,另取a。据我所知,没有其他方法可以从整数中选择
# 4 楼答案
另一种方法是,将数字存储到列表中,洗牌,然后获取第一个元素
# 5 楼答案
# 6 楼答案
在我看来,这里的主要问题是两个数的熵,而不是利用熵。索引数组或布尔值本质上是一样的。你还可以做的(希望它更随机)是让Java给你一个介于0到100之间的随机数。现在,如果选择的随机数是奇数,则选择
int c = a
。否则选择b
。我可能错了,但在0到100之间随机选择似乎比在两个数字之间随机选择更随机