我有两个整数,让他们成为
int a = 35:
int b = 70;
Run Code Online (Sandbox Code Playgroud)
我想在运行时随机选择其中一个并分配给另一个变量.即
int c = a or b:
Run Code Online (Sandbox Code Playgroud)
我想到的一种方法是创建一个包含这两个整数的数组,并找到一个介于0和1之间的随机整数,并将其用作数组的索引来获取数字.
或者随机化布尔值并在if-else中使用它.
我的问题是,是否有更好,更有效的方法来实现这一目标?即从两个先前定义的整数中选择一个数字?
您是否有特定原因要求更有效的解决方案?除非此功能位于某个非常紧密的内部循环中(例如,在光线跟踪器中),否则您可能会尝试过早地优化代码.
如果你想避免使用数组,如果你不喜欢if语句的"膨胀",你可以使用三元选择运算符在两者之间进行选择:
int a = 35;
int b = 70;
int c = random.nextBoolean() ? a : b;
Run Code Online (Sandbox Code Playgroud)
在哪里random是一个实例java.util.Random.您可以将此实例存储为final static类中的字段以重复使用它.
如果您不需要真正的随机性,但只想在给定代码块的每次调用中在两个数字之间切换,那么您只需存储boolean并切换它即可:
...
int c = toggle ? a : b;
toggle = !toggle;
Run Code Online (Sandbox Code Playgroud)
由于我无法评论其他答案,我想指出一些其他答案的问题,这些答案建议在更大范围内生成随机整数,并根据结果是奇数还是偶数做出决定,或者如果它低于或大于中间值.这实际上与生成0和1之间的随机整数完全相同,除了过于复杂.该nextInt(n)方法在-2 ^ 31和(2 ^ 31)-1之间的随机生成的整数上使用模运算符,这基本上就是你最终将要做的事情,只是用n = 2.
如果您使用标准库方法Collections.shuffle(),那么您将再次过度复杂化,因为标准库使用标准库的随机数生成器.
请注意,所有的建议(到目前为止)是少比我的简单而有效nextBoolean()的建议,因为它们需要不必要的方法调用和算术.
另一种方法是将数字存储到列表中,随机播放,然后取第一个元素.
ArrayList<Integer> numbers=new ArrayList<Integer>();
numbers.add(35);
numbers.add(70);
Collections.shuffle(numbers);
numbers.get(0);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9762 次 |
| 最近记录: |