为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

墨色风雨 2021-10-13 15:54:31
我正在尝试使用边界打印随机偶数列表(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
查看完整描述

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).

}


查看完整回答
反对 回复 2021-10-13
?
梦里花落0921

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;

}


查看完整回答
反对 回复 2021-10-13
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

这是使用流实现此目的的一种非常明确的方法:


List<Integer> myRandomInts = Random.ints(lower, upper + 1)

    .filter(i -> i % 2 == 0)

    .limit(5).boxed()

    .collect(Collectors.toList());

这可以理解为“在给定的边界之间生成无限的随机数流,过滤掉赔率,取前 5 个,变成Integer对象,然后收集到一个列表中。”


查看完整回答
反对 回复 2021-10-13
  • 3 回答
  • 0 关注
  • 160 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信