Вернуть тот же случайный int 3 раза и повторить - PullRequest
0 голосов
/ 06 июня 2011

Я работаю над заданием, и оно идёт довольно хорошо, но я до сих пор не совсем понимаю одну вещь. Дело в том, чтобы узнать о наследовании и чтении существующего кода. Без добавления другого метода мне нужно заставить метод getMove () возвращать одно и то же случайное число три раза подряд, а затем выбрать новое случайное число и заставить его вернуть новое число три раза. и т. д.

Есть несколько других классов, в том числе класс, который поддерживает счет, отличный от того, который я установил здесь. Если было бы полезно увидеть какие-либо из этих классов, дайте мне знать, и я опубликую их, но я думаю, что они довольно не имеют отношения к вопросу.

Редактировать: Уточнение

Мне нужно, чтобы метод getMove () возвращал по одному int на вызов. Первые 3 вызова должны возвращать один и тот же randomInt. После этого должен быть выбран новый randomInt, который должен быть возвращен для следующих трех вызовов. Это должно повторяться до тех пор, пока оно называется.

Окончательное решение:

public class Crab extends SeaCreature {
    private static final char CRAB = 'C';
    private int direction = rand.nextInt(4);
    private int count;
    /**
     * Construct a SeaCreature object with the given character representation
     * @param c  the character for this SeaCreature
     */
    public Crab(){
        super(CRAB);

    }

    /** Answers back the next move for this SeaCreature.
     * @return 0, 1, 2, or 3
     */
    public int getMove() {
        if (count < 3) {
            count ++;
            return direction;            
        }
        count = 1;
        direction = rand.nextInt(4);
        return direction;
    }
}

Ответы [ 2 ]

3 голосов
/ 06 июня 2011

Я вижу проблему, я думаю.

Подсказка - вам нужно тщательно продумать, какое состояние принадлежит всем Ракам и какое состояние является специфическим для отдельного Краба.В настоящее время вы ошиблись, и все Крабы делятся каким-то состоянием, которого они не должны.Если предположить, что существует много живых экземпляров Crab, это приведет к тому, что getMove() будет вести себя не так, как вы этого хотите.

3 голосов
/ 06 июня 2011

Не то чтобы это «проблема», но ваши поля должны быть полями экземпляра (т.е. не статичными).

Однако, чтобы изолировать проблему от ваших классов, вот код, который работает.Обратите внимание, что вы можете получить такой же ход при последующих вызовах rand ().

private static int direction = rand();
private static int count;

public static int getMove()
{
    if (count < 3)
    {
        count++;
        return direction;
    }

    count = 0;
    direction = rand();
    return direction;
}

private static int rand()
{
    return (int) (Math.random() * 4); // 0, 1, 2 or 3
}
...