Как узнать, содержит ли HeapQueue значение в Java? - PullRequest
0 голосов
/ 11 мая 2019

У меня проблемы с написанием метода с поиском, содержит ли MaxHeapPriorityQueue значение.

Инструкции гласят: метод contains (E) должен возвращать true, если заданное значение найдено в очереди. Он должен использовать свой закрытый вспомогательный метод для рекурсивного поиска в очереди.

Вот что у меня есть

public class MaxHeapPriorityQueue<E extends Comparable<E>>
{
private E[] elementData;
private int size;

@SuppressWarnings("unchecked")
public MaxHeapPriorityQueue()
{
    elementData = (E[]) new Comparable[10];
    size = 0;
}
public boolean contains(Object value)
{
     return contains(value, 0);
}
private boolean contains(Object value, int index)
 {
     if(elementData[index] != null && elementData[index] == value)
    {
        return true;
    }
    else
    {
        return contains(value, ++index);
    }
 }
}

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Я не знаю, почему у меня были такие проблемы с этим, но вот что сработало для меня. Мне пришлось использовать размер вместо elementData.length.

public boolean contains(Object value)
{
    return contains(value, 0);
}
private boolean contains(Object value, int index)
{
    if (index > size)
    {
        return false;
    }
    else if(elementData[index] == value && elementData[index] != null)
    {
        return true;
    }
    else
    {
        return contains(value, ++index);
    }
}
0 голосов
/ 17 мая 2019

Вот еще один способ ее решения.

private boolean contains(Object value, int index)
{
    if(index > size || elementData[index].compareTo((E) value) < 0)
    {
        return false;
    }
    else if(value.equals(elementData[index]))
    {
        return true;
    }
    else
    {
        return contains(value, leftChild(index)) || contains(value, rightChild(index));
    }
}
...