Метатель кости с методами - PullRequest
0 голосов
/ 26 октября 2018

В настоящее время я выполняю некоторые упражнения из своей учебной книги, и одна из задач заключалась в следующем: Написать класс игры в кости "Игра в кости", которая имеет значение между 1-6.Также должен быть конструктор, который выбирает случайное значение, и метод roll (), который также выбирает случайное значение.Также должен быть создан метод getValue (), который будет использоваться для получения отображаемого значения.Напишите тестовый класс для этой программы.

Редактировать * Я переместил рандомизатор до конструктора, оставив метод roll пустым.Что мне делать в методе roll (), когда конструктор уже рандомизирует?

Это мой код:

public class Dice {

    int value;
    int currentRoll;

    public Dice() {
        Random rand = new Random();
        this.value = 1;
        this.currentRoll = rand.nextInt(6) + 1;
    }

    public int roll() {
        Random rand = new Random();
        this.currentRoll = rand.nextInt(6) + 1;
        return this.currentRoll;
    }

    public int getValue() {
        return this.currentRoll;
    }
}

Что я не понимаю, так это то, почему вы должны случайным образомзначение как в конструкторе, так и в методе roll ()?Кроме того, что я пропускаю?

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Требуется, чтобы и конструктор, и метод roll() выбирали случайное значение. Они делают то же самое. Поэтому, чтобы избежать ненужного дублирования кода, конструктор может, например, вызвать метод roll.

Предостережение: вредная привычка помещать вызовы переопределенных методов в конструкторе. Этот пост объясняет почему это так.

Ваш код может выглядеть следующим образом:

class Dice {

    private int value;

    // You could create the Random instance here once, instead of everytime
    // recreating it
    private Random r = new Random();

    public Dice() {
        roll();
    }

    // You could also change the return type to and int and return this.value
    public final void roll() {
        this.value = this.r.nextInt(6) + 1;
    }

    public int getValue() {
        return this.value;
    }
}

Я не знаю, полностью ли я согласен с требованиями, но поскольку они являются требованиями, вам следует уступить им.

0 голосов
/ 26 октября 2018

Зачем выбирать случайное значение в конструкторе?Ну, честно говоря, потому что это требование упражнения.Почему у них есть это требование?Если бы мне пришлось угадывать, это для того, чтобы смоделировать тот факт, что у кубика всегда будет какое-то лицо вверх (то есть, иметь значение), независимо от того, бросали вы его явно или нет, но если вы хотите получить окончательный ответ, вы 'Я должен спросить автора книги, что он или она имели в виду.

Вы можете добиться этого, вызвав roll в конструкторе.Также обратите внимание, что у вас есть избыточность с value элементом, который инициализирован, но никогда не используется:

public class Dice {
    private int currentRoll;

    //Constructor
    public Dice() {
        roll();
    }

    // methods...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...