我有两个整数,让它们成为
int a = 35:
int b = 70;
我想在运行时随机选择其中一个并分配给另一个变量。 IE。
int c = a or b:
我想到的一种方法是用这两个整数创建一个数组,并找到一个介于0和1之间的随机整数,并将其用作获取该数字的数组索引。
或将 boolean 值随机化,并在if-else中使用它。
我的问题是,有没有更好,更有效的方法来实现这一目标? IE。从两个预先定义的整数中选择一个数字?
最佳答案
您是否有特定原因要求更有效的解决方案?除非此功能位于某个地方非常紧密的内部循环中(例如在光线跟踪器中),否则您可能会试图过早地优化代码。
如果您想避免使用数组,并且不喜欢if语句的“膨胀”,则可以使用三元选择运算符在两者之间进行选择:
int a = 35;
int b = 70;
int c = random.nextBoolean() ? a : b;
其中
random
是java.util.Random
的实例。您可以将该实例存储为类中的final static
字段以重用它。如果您不需要真正的随机性,而只想在给定代码块的每次调用中在两个数字之间切换,则只需存储一个
boolean
并切换它即可:...
int c = toggle ? a : b;
toggle = !toggle;
由于我无法评论其他答案,因此我想指出一些其他答案的问题,这些答案建议生成更大范围内的随机整数,并根据结果是奇数还是偶数来做出决定,或者如果它小于或大于中间值。实际上,这与生成0到1之间的随机整数完全相同,只是过于复杂。
nextInt(n)
方法uses the modulo operator在-2 ^ 31和(2 ^ 31)-1之间随机生成的整数上,这实际上是您最终将要执行的操作,仅使用n = 2
即可。如果您使用的是
Collections.shuffle()
之类的标准库方法,那么您将再次变得过于复杂,因为标准库使用标准库的随机数生成器。请注意,到目前为止,所有建议都不如我的简单
nextBoolean()
建议有效,因为它们需要不必要的方法调用和算术。