贝克尔机器人随机化墙

时间:2013-09-25 17:08:58

标签: java

我在运行程序时遇到问题。该程序应该构建一个由墙壁组成的盒子,应该在每次运行程序时覆盖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);


    }

2 个答案:

答案 0 :(得分:5)

如果查看Javadoc for Random,您会发现nextInt(int n)返回0n之间的值。您可能想要做的是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);