2012-03-15 2 views
2

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

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

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

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

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; 
} 

}

Это в сортировочном рубрике:

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

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

+0

Что конкретно вы возникли проблемы с? Какую часть (или части) вы не понимаете? Кстати, в рубрике конкретно говорится, что вы не должны иметь экземпляр 'Vector' внутри вашего класса, поэтому вам, вероятно, следует избавиться от вашей переменной экземпляра' line'. –

+0

@CameronSkinner, это та часть, с которой у меня проблемы. Довольно неведомо, что делать там вместо Vector, поскольку этот класс является подклассом вектора. – Dim

+0

ОК, поэтому подумайте о том, что значит для одного класса продлить другой. Является ли ** **-**, ** имеет-** или ** -встроен-в-терминах ** отношения? –

ответ

2

Вам предлагается написать новый класс 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 в своем классе.

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

public void enqueue(Object o) { 
    // what method(s) could you use to simulate an enqueue of this object? 
    // Maybe `add(o)`? 
} 
1

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

2

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

После того, как вы думаете о новом классе, наследуя все функциональности Vector класса, что может быть проще, чтобы увидеть, что

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

(я намеренно обращаясь концептуальные вопросы здесь, а не на синтаксических, так что, как представляется, реальная точка вашего вопроса.)

Смежные вопросы