使用继承在两个值之间打印随机偶数

时间:2018-09-26 22:40:55

标签: java class inheritance random

我正在尝试使用界限打印随机偶数(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

5 个答案:

答案 0 :(得分:2)

尚不清楚为什么取const text = 'A\uD835\uDC68B\uD835\uDC69C\uD835\uDC6A' const chars = [...text] // ["A", "", "B", "", "C", ""] 的余数会产生偶数。而是生成一个20范围内的数字,然后将结果乘以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对象,然后收集到一个列表中。