Реализация одометра в Java - PullRequest
3 голосов
/ 08 февраля 2012

Мне нравится идея создания приложения в стиле одометра на Java.

В принципе, я знаю, что мог бы использовать серию циклов для управления вращением, но я думал сделать это математически.

Так что, если каждый циферблат вращается примерно десять раз, от 0 до 9, и имеется шесть циферблатов, это должно составить в общей сложности 1000000 вращений, если мои математические данные верны.

Math.pow(10, 6);

Мой вопрос; что было бы наиболее эффективным способом отслеживания последнего поворота циферблатов, потому что, как и серия настоящих винтиков, на каждые десять оборотов последнего циферблата последний циферблат поворачивался бы один раз.

И затем для каждого десятого оборота секунды после последнего набора будет вращаться третий из последнего, а затем все остальные после этого сбрасываются до нуля.

Любые советы или предложения?

Ответы [ 3 ]

4 голосов
/ 08 февраля 2012

Предлагаемая реализация

Нет смысла делать модель более сложной, чем просто ради механического воссоздания объекта.См. Ответ John3136 для подтверждения.

Вращение модель может быть таким простым:

int rotations = 0;

/**
 * Increment rotations every rotation
 */
void rotate() {
    rotations++;
    if (rotations >= Math.pow(10, 6)) // consider extracting as constant
        rotations = 0; // reset
}

Затем создать вид :

/**
 * dial can be from 1 .. 6 (where dial 1 moves every rotation)
 */
int getDialPosition(int dial) {
    int pow = Math.pow(10, dial);
    return Math.floor((rotations % pow) / (pow / 10));
    // above gets the digit at position dial
}

Примечания

  • Обернуть вышеуказанную модель в класс одометра
  • Создайте вид, который обновляется при каждом повороте
1 голос
/ 08 февраля 2012

Вспомните дизайн и разделите проблемы. То, что у вас есть, это отображение некоторого числа от 0 до 9999999. Одометр - это просто «просмотр» этого числа. Я сделал бы свою модель (содержит число и имеет некоторый метод для увеличения числа), а затем написал бы представление, чтобы отобразить его в любом стиле графического интерфейса, который я выберу.

0 голосов
/ 08 февраля 2012

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

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