我在运行程序时遇到问题。该程序应该构建一个由墙壁组成的盒子,应该在每次运行程序时覆盖5-10个街道/大道和不同的大小和位置。虽然在运行时有时我只能获得1条街道或街道或5英尺以下的东西?我错过了什么?
public class CityWalls extends Thing {
public CityWalls(City c, int st, int av, Direction d) {
super(c, st ,av ,d);
Random rand = new Random();
int randomNum = rand.nextInt(11);
int oddIncrement = 0;
if (randomNum % 2 == 0)
{
oddIncrement = 1;
}
for (int i = 0; i < randomNum; i++) { // creating the box. 7 is the placement of the robot so he appears in the middle of the box.
new Wall(c, i+(7-randomNum/2), (7-randomNum/2), Direction.WEST);
new Wall(c, i+(7-randomNum/2), (7+randomNum/2) - oddIncrement, Direction.EAST);
new Wall(c, (7-randomNum/2), i+(7-randomNum/2), Direction.NORTH);
new Wall(c, (7+randomNum/2)-oddIncrement, i+(7-randomNum/2), Direction.SOUTH);
}
答案 0 :(得分:5)
如果查看Javadoc for Random,您会发现nextInt(int n)
返回0
和n
之间的值。您可能想要做的是5 + rand.nextInt(6)
,因为这样可以确保范围为[5, (5 + 6)[
而不是[0, 11[
。
希望这有帮助。
答案 1 :(得分:2)
使用:
int randomNum = 5 + (int)(Math.random() * ((10 - 5) + 1))
而不是
Random rand = new Random();
int randomNum = rand.nextInt(11);