我的 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 010,然后减去 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 有错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

random

函数中的错误最小和最大分配

具有 min()/max() 调用的代码出现奇怪的 C++ 错误

random.nextInt()的用法

我该如何解决这个代码?没有错误可能是错误代码 - javascript (array,numbers,max,min)

Java生成指定范围内的工具类