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

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

Суперкласс был сделан в первом задании:

*DecrementingCarousel контейнер, принимающий элементы int. DecrementingCarousel имеет максимальную вместимость, указанную в конструкторе. При создании DecrementingCarousel находится в состоянии накопления: вы можете добавлять элементы с помощью метода addElement и создать объект CarouselRun с помощью метода run. После вызова метода run DecrementingCarousel находится в рабочем состоянии: он отказывается добавлять дополнительные элементы.

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

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

CarouselRun также имеет метод isFinished который указывает, закончились ли в карусели элементы для уменьшения

Детали спецификации

DecrementingCarousel имеет два public метода:

boolean addElement(int element) – добавляет элемент. Если элемент отрицателен или равен нулю, не добавляет его. Если контейнер заполнен, не добавляет элемент. Если метод run был вызван для создания CarouselRun, не добавляет элемент. Если элемент добавлен успешно, возвращает true. В противном случае – false.

CarouselRun run() – возвращает CarouselRun для перебора элементов. Если метод run уже был вызван ранее, он должен вернуть null: DecrementingCarousel может генерировать только один объект CarouselRun.

CarouselRun имеет два public метода:

int next() – возвращает текущее значение текущего элемента, затем уменьшает текущий элемент на единицу и переключается на следующий элемент в порядке добавления. Пропускает нулевые элементы. Когда больше нет элементов для уменьшения, возвращает -1.

boolean isFinished() – когда больше нет элементов для уменьшения, возвращает true. В противном случае возвращает false.

Examples

Empty case:

CarouselRun run = new DecrementingCarousel(7).run();
System.out.println(run.isFinished()); //true
System.out.println(run.next()); //-1

Regular case:

DecrementingCarousel carousel = new DecrementingCarousel(7);

carousel.addElement(2);
carousel.addElement(3);
carousel.addElement(1);

CarouselRun run = carousel.run();

System.out.println(run.isFinished()); //false

System.out.println(run.next()); //2
System.out.println(run.next()); //3
System.out.println(run.next()); //1

System.out.println(run.next()); //1
System.out.println(run.next()); //2

System.out.println(run.next()); //1

System.out.println(run.isFinished()); //true
System.out.println(run.next()); //-1

Мои рабочие решения для первого задания

DecrementingCarousel

public class DecrementingCarousel {}

Новое задание

В этом задании вам необходимо расширить класс DecrementingCarousel. Вам нужно реализовать класс HalvingCarousel. Этот подкласс должен делить элементы пополам, а не уменьшать их на единицу. Обратите внимание, что вам нужно применить обычное целочисленное деление, отбрасывая остаток. Например, 5 / 2 = 2.

Examples

Empty case:

CarouselRun run = new HalvingCarousel(7).run();
System.out.println(run.isFinished()); //true
System.out.println(run.next()); //-1

Regular case:

DecrementingCarousel carousel = new HalvingCarousel(7);

carousel.addElement(20);
carousel.addElement(30);
carousel.addElement(10);

CarouselRun run = carousel.run();

System.out.println(run.isFinished()); //false

System.out.println(run.next()); //20
System.out.println(run.next()); //30
System.out.println(run.next()); //10

System.out.println(run.next()); //10
System.out.println(run.next()); //15
System.out.println(run.next()); //5

System.out.println(run.next()); //5
System.out.println(run.next()); //7
System.out.println(run.next()); //2

System.out.println(run.next()); //2
System.out.println(run.next()); //3
System.out.println(run.next()); //1

System.out.println(run.next()); //1
System.out.println(run.next()); //1

System.out.println(run.isFinished()); //true
System.out.println(run.next()); //-1

Another

HalvingCarousel carousel = new HalvingCarousel(6);

        carousel.addElement(7);
        carousel.addElement(2);
        carousel.addElement(100);
        carousel.addElement(3);
        carousel.addElement(1);
        carousel.addElement(4);
        CarouselRun run = carousel.run();

        System.out.println(run.next());// 7
        System.out.println(run.next());// 2
        System.out.println(run.next());// 100
        System.out.println(run.next());// 3
        System.out.println(run.next());// 1
        System.out.println(run.next());// 4

        System.out.println(run.next());// 3
        System.out.println(run.next());// 1
        System.out.println(run.next());// 50
        System.out.println(run.next());// 1
        System.out.println(run.next());// 2

        System.out.println(run.next());// 1
        System.out.println(run.next());// 25
        System.out.println(run.next());// 1

        System.out.println(run.next());// 12

        System.out.println(run.next());// 6
        System.out.println(run.next());// 3
        System.out.println(run.next());// 1

        System.out.println(run.next());// -1
        System.out.println(run.isFinished()); //true

Изначально подкласс выглядит так

public class HalvingCarousel extends DecrementingCarousel {
    public HalvingCarousel(final int capacity) {
        super(capacity);    }
}

Как происходит вызов видно в примерах выше, отличия только в одной строчке.

DecrementingCarousel carousel = new DecrementingCarousel(7);
HalvingCarousel carousel = new HalvingCarousel(7);

Вносить изменения можно только в классах DecrementingCarousel(и подклассе) и CarouselRun


я нашел решение, всем спасибо.


Ответы (0 шт):