Класс Десятичный счетчик на Java

Прикладное программирование Программирование на Java Класс Десятичный счетчик на Java

Помечено: ,

  • В этой теме 0 ответов, 1 участник, последнее обновление 1 месяц, 2 недели назад сделано Васильев Владимир Сергеевич.
Просмотр 0 веток ответов
  • Автор
    Сообщения
    • #6859
      @admin
      StudLance.ru

      Опишите класс, реализующий десятичный счетчик, который может увеличивать или уменьшать свое значение на единицу в заданном диапазоне. Предусмотрите инициализацию счетчика значениями по умолчанию и произвольными значениями. Счетчик имеет методы увеличения или уменьшения состояния, и позволяющее получить его текущее состояние. Написать код, демонстрирующий все возможности класса.

      Решение

      Если вам не понятны какие-либо части решения, загляните в урок и практикум.

      Класс счетчика будет содержать поля: минимальное, максимальное и текущее значения. При этом, стоит обработать следующие случаи:

      1. при инкременте текущее значение стало больше максимального – сделаем его равным минимальному;
      2. при декременте текущее значение стало меньше минимального – сделаем его равным максимальному;
      3. в конструктор передано минимальное значение больше максимального – поменяем их местами;
      4. в конструктор передано текущее значение больше максимального – сделаем его равным максимальному;
      5. к конструктор передано текущее значение меньше минимального – сделаем его равным минимальному.

      В условии задачи не указано как именно нужно обработать такие ситуации – реализация выбрана «на свое усмотрение».

      Исходный код модуля Counter.java:

      class Counter {
       private int min, max, current;
      
       public Counter(int min_, int max_, int current_) {
        min = min_;
        max = max_;
        current = current_;
      
        if (max < min) {
         int tmp = max;
         max = min;
         min = tmp;
        }
      
        if (current < min)
         current = min;
        if (current > max)
         current = max;
       }
      
       public Counter(int min_, int max_) {
        this(min_, max_, min_);
        current = min;
       }
      
       public Counter() {
        this(0, 16, 0);
       }
      
       public void inc() {
        current++;
        if (current > max)
         current = min;
       }
      
       public void dec() {
        current--;
        if (current < min)
         current = max;
       }
      
       public int value() {
        return current;
       }
      }

      Из «интересного» в этом классе – конструирование. Конструктор от трех параметров содержит нетривиальную логику, чтобы ее не дублировать в других конструкторах – можно использовать конструкцию this(), в результате внутри одного конструктора будет вызван другой.

      Исходный код модуля Main.java:

      public class Main {
       public static void main(String[] args) {
        Counter a = new Counter(5, 10, 6);
        Counter b = new Counter(6, 4, 7);
        Counter c = new Counter(5, 3);
      
        System.out.println("a: " + a.value());
        System.out.println("b: " + b.value());
        System.out.println("c: " + c.value());
        System.out.println("----------------------");
      
        for (int i = 0; i < 2; ++i) {
         a.inc();
         b.inc();
         c.inc();
        }
      
        System.out.println("a: " + a.value());
        System.out.println("b: " + b.value());
        System.out.println("c: " + c.value());
        System.out.println("----------------------");
      
        for (int i = 0; i < 20; ++i) {
         a.dec();
         b.dec();
         c.dec();
        }
      
        System.out.println("a: " + a.value());
        System.out.println("b: " + b.value());
        System.out.println("c: " + c.value());
        System.out.println("----------------------");
       }
      }

      В этом модуле создается три объекта счетчика, затрагивающих разные случаи, рассмотренные выше:

      • у первого счетчика изначально корректный интервал и начальное значение;
      • у второго – min > max, поэтому интервал [6, 4] преобразуется в [4, 6]. Кроме того, current > max, поэтому current = 6;
      • у третьего – min > max, поэтому интервал [5, 3] преобразуется в [3, 5]. Начальное значение после этого выставляется в 3 – эта ситуация обрабатывается в строке 23 модуля Counter.

      Затем, каждый счетчик инкрементируется дважды, при этом:

      • значение первого и третьего счетчиков увеличатся на 2, так как не произойдет переполнения;
      • второй счетчик равен max, поэтому после первого инкремента он получает значение min (4), следующий инкремент приведет к current = 5.

      Затем, по аналогичной схеме выполняется 20 операций декремента, результаты работы приведены на рисунке:

      Запустить код можно в онлайн-компиляторе.

      StudLance.ru

Просмотр 0 веток ответов
  • Для ответа в этой теме необходимо авторизоваться.
×