Нужна помощь / предложения с коротким кодом Java - PullRequest
1 голос
/ 15 марта 2012

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

Вот что должен делать класс (это один из 6 классов, необходимых для этого назначения):

"Записатьполностью документированный класс с именем Queue, который является подклассом Vector (или любого другого класса по вашему выбору). Ваш класс очереди должен определять операции для isEmpty, enqueue, dequeue и size * вместе с конструктором, который определяет пустую очередь. ПрочитайтеДокументация по Java API, чтобы выяснить, какие методы действуют так же, как постановка и удаление очереди. Помните, что ваша очередь будет содержать элементы типа Object. * Метод "size" просто возвращает количество элементов в очереди "

Вот что я написал для этого класса:

import java.util.Vector;

    public class Queue extends Vector {

Vector<Object> line;

public Queue() {

}

public boolean isEmpty() {
    if (line.isEmpty())
        return true;
    else
        return false;
}

public void enqueue(Customer customer) {
    line.addElement(customer);
}

public void dequeue() {
    line.removeElementAt(0);
}

public int size() {
    return elementCount;
}

}

В рубрике оценки:

Класс очереди определен правильно какподкласс Vector, используя «extends» и используя доступные методы Vector (класс Queue не должен иметь внутри него экземпляр Vector).Любой другой класс может быть использован вместо Vector.[10 баллов]

Я видел вектор API, поэтому, пожалуйста, не просто связывайте меня с ним (без обид), потому что у меня все еще есть проблемы с пониманием этого.Любая помощь в том, что делать, очень ценится.

Ответы [ 3 ]

2 голосов
/ 15 марта 2012

Возможно, вам будет полезно подумать о вашем новом классе, Queue в данном случае, как обертка или оболочка для класса, который вы расширяете.Если бы вы создали Queue как подкласс Vector и ничего с ним не делали, он все равно имел бы все состояние и функциональность Vector.Добавив переменную экземпляра line, вы, по сути, получаете два вектора - один, который вы наследуете, и другой, который вы добавили как дополнительное состояние.

Как только вы представите, что ваш новый класс наследует все функциональные возможностииз класса Vector может быть легче увидеть, что

  1. Возможно, у вас уже есть некоторые функции, которые вам нужны, и
  2. Ваши новые методы будут вызывать функции Vectorоперировать состоянием, которое у вас уже есть.

(Я намеренно рассматриваю здесь концептуальные вопросы, а не синтаксические, поскольку это кажется реальной точкой вашего вопроса.)

2 голосов
/ 15 марта 2012

Вам предлагается написать новый класс с именем Queue

  1. с методами isEmpty, enqueue, dequeue и size
  2. вашего классаextend Vector (или что-то похожее на Vector)
  3. ваш класс должен использовать методы расширенного класса для реализации четырех обязательных методов.

Например,:

public class Queue extends Vector{

    // here you are implementing isEmpty
    public boolean isEmpty() {
        // ... by delegating to the method with the same name in the Vector class
        return super.isEmpty();
    }

    // ...

}

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

Как говорит Якуб, вам не придется реализовывать методыкоторые имеют то же имя, что и метод в Vector (поэтому удалите этот метод isEmpty).Где вам нужно будет сделать перевод, например:

public void enqueue(Object o) {
    // what method(s) could you use to simulate an enqueue of this object? 
    // Maybe `add(o)`?
}
1 голос
/ 15 марта 2012

Что ж, если ваша очередь может расширять любой класс по вашему выбору, вы могли бы просто расширить LinkedList, в котором уже реализована функциональность очереди. Вам нужно будет только объявить те методы, которые не имеют одно и то же имя (например, dequeue () и poll ()).

...