我的 min 和 max nextInt 有错误 [重复]
Posted
技术标签:
【中文标题】我的 min 和 max nextInt 有错误 [重复]【英文标题】:I have an error with min and max nextInt [duplicate] 【发布时间】:2018-01-30 02:26:50 【问题描述】:我想让向量 x 上的速度随机,最小 -5 和最大 5。每次运行游戏时它都会崩溃。 这个问题是随机的,因为当我设置 velX = 2 或 3 时它工作得很好,请帮助我。 (对不起我的英语,希望你能理解我)
velX = random.nextInt(5 - -5) + -5;
【问题讨论】:
5 - -5
是从 5 中减去负 5。这不是一个范围。
(如果你打算在那里写一个减法,好吧,这是一种奇怪的方式。)
【参考方案1】:
你可能想要这个:
velX = random.nextInt(10) - 5;
(生成一个随机整数 btw 0
和 10
,然后减去 5
,给你一个范围 btw -5
(包括)和 5
(不包括)。如果你想要 5
包括在内,将nextInt()
参数更改为11
。
OTOH,您可能不应该使用真正的随机数,而应该使用钟形曲线(中间的值比异常值出现的频率更高)。实现这一点的一种简单方法是创建一个包含所有值的列表(一次用于异常值,更常见的是用于中间值)并在其中随机选择。您可能想尝试使用这些值来查看最适合您的值。
// do this only once, during initialization
List<Integer> values = new ArrayList<>();
values.add(-5);
values.addAll(Collections.nCopies(2, -4));
values.addAll(Collections.nCopies(3, -3));
values.addAll(Collections.nCopies(5, -2));
values.addAll(Collections.nCopies(8, -1));
values.addAll(Collections.nCopies(12, 0));
values.addAll(Collections.nCopies(8, 1));
values.addAll(Collections.nCopies(5, 2));
values.addAll(Collections.nCopies(3, 3));
values.addAll(Collections.nCopies(2, 4));
values.add(5);
// do this every time
velX = values.get(random.nextInt(values.size()));
【讨论】:
我只想让 velX 介于 -5 和 5 之间,有人可以写信给我,我到底需要怎么做? velX = random.nextInt(10) - 5 与此相同 velX = random.nextInt(5 - -5) + -5;还是不? 我的回答的第一部分正是你想要的 游戏又崩溃了,能解释一下原因吗? com.sp.main.Game.run(Game .java:71) 在 java.lang.Thread.run(Unknown Source) 这是我的错误以上是关于我的 min 和 max nextInt 有错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
具有 min()/max() 调用的代码出现奇怪的 C++ 错误