【问题标题】:I have an error with min and max nextInt [duplicate]我的 min 和 max nextInt 有错误 [重复]
【发布时间】:2018-01-30 02:26:50
【问题描述】:

我想让向量 x 上的速度随机,最小 -5 和最大 5。每次运行游戏时它都会崩溃。 这个问题是随机的,因为当我设置 velX = 2 或 3 时它工作得很好,请帮助我。 (对不起我的英语,希望你能理解我)

velX = random.nextInt(5 - -5) + -5;

【问题讨论】:

  • 5 - -5 是从 5 中减去负 5。这不是一个范围。
  • (如果你打算在那里写一个减法,好吧,这是一种奇怪的方式。)

标签: java


【解决方案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) 这是我的错误
猜你喜欢
  • 2017-09-23
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-25
  • 1970-01-01
  • 2022-11-25
相关资源
最近更新 更多