3 回答
TA贡献1829条经验 获得超4个赞
不清楚为什么取 的余数2会产生偶数。相反,生成范围0为 to 的数字h / 2,然后将其结果乘以2。喜欢,
public int nextEven(int h){
int n = ThreadLocalRandom.current().nextInt(1 + (h / 2)); // 0 to (h / 2) inclusive
return n * 2; // n * 2 is even (or zero).
}
TA贡献1772条经验 获得超6个赞
mod 运算符%将为您提供第一个值除以第二个值的余数。
value % 2
...如果value是偶数则返回 0 ,如果value是奇数则返回1 。
由于rand是对包含您的代码的类的实例的引用,因此您具有无限递归。你真正需要的是这样的:
public int nextEven(int h){
int evenRandomValue;
do {
evenRandomValue = (int)(Math.random() * (h + 1));
} while(evenRandomValue % 2 == 1);
return evenRandomValue;
}
TA贡献1893条经验 获得超10个赞
这是使用流实现此目的的一种非常明确的方法:
List<Integer> myRandomInts = Random.ints(lower, upper + 1)
.filter(i -> i % 2 == 0)
.limit(5).boxed()
.collect(Collectors.toList());
这可以理解为“在给定的边界之间生成无限的随机数流,过滤掉赔率,取前 5 个,变成Integer对象,然后收集到一个列表中。”
添加回答
举报