我正在尝试使用界限打印随机偶数(5次)的列表。示例是从0到30(包括这两个数字)。这是我到目前为止所拥有的(这是在自己的类中):
public int nextEven(int h){
int n = rand.nextEven(h) % 2;
return n;
}
这是从我的主要方法打印的地方:
System.out.println("Random Even:");
for (int i = 0; i < 5; i++){
System.out.println(rand.nextEven(30));
}
当我运行程序时,它给了我一个错误,我不确定如何解决这个问题。这是期望的输出从0到30的偶数的示例:
4 26 12 10 20
答案 0 :(得分:2)
尚不清楚为什么取const text = 'A\uD835\uDC68B\uD835\uDC69C\uD835\uDC6A'
const chars = [...text] // ["A", "", "B", "", "C", ""]
的余数会产生偶数。而是生成一个2
到0
范围内的数字,然后将结果乘以h / 2
。喜欢,
2
答案 1 :(得分:0)
兰特到底是什么?它是Random类还是您自己的类的实例? 由于您想对继承做一些事情,所以我想您想覆盖一个方法,但是如果rand是java Random类的实例,那么它将无法正常工作。
该错误可能是由于永远递归调用nextEven方法。
如果您能弄清您到底想做什么?
答案 2 :(得分:0)
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;
}
答案 3 :(得分:0)
我至少看到了两种解决方案。
第一个假设为random + 1 = random
。我的意思是,如果您添加或减去一个随机数,您仍然会获得一个有效的随机数。这就是为什么您可以使用Random
类在所需时间段内生成一个值,然后对其加或减一个奇数的原因。
第二种方法只是在所需时间段内生成偶数数组。然后从此数组中获取一个随机值。
答案 4 :(得分:0)
这是使用流实现此目标的相当明确的方法:
List<Integer> myRandomInts = Random.ints(lower, upper + 1)
.filter(i -> i % 2 == 0)
.limit(5).boxed()
.collect(Collectors.toList());
这可以理解为“在给定范围内生成无限的随机数流,滤除几率,取前5个,变成Integer
对象,然后收集到一个列表中。