Как бы я удалил элемент max и соответственно сдвинул значения - PullRequest
0 голосов
/ 17 марта 2019

У меня есть следующий код, который находит максимальное значение и сдвигает значения влево:

@Override
public void remove() throws QueueUnderflowException {
    int max = 0;
    int index = 0;
    if (isEmpty()) {
        throw new QueueUnderflowException();
    } else {
        for (int i = 0; i < tailIndex + 1; i++) {
            int current = ((PriorityItem<T>) storage[i]).getPriority();
            if (current > max) {
                max = current;
                index = i;
            }
        }

        for (int i = 0; i < tailIndex + 1; i++) {
            int current = ((PriorityItem<T>) storage[i]).getPriority();

            if (current >= max) {

                storage[i] = storage[i + 1];

            }
        }
        tailIndex = tailIndex - 1;
    }
}

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

вот вход:

[(y, 1), (o, 8), (u, 7), (o, 0)]

Требуемый выход:

(y, 1), (u, 7), (o, 0)]

Токовый выход:

[(y, 1), (u, 7), (u, 7)]

1 Ответ

0 голосов
/ 17 марта 2019

Ваш второй цикл должен быть упрощен следующим образом?Если во втором цикле проверка неверна, вы должны проверить, следует ли вам сдвигаться или нет, больше не проверять значение приоритета, а только по индексу

for (int i = 0; i < tailIndex + 1; i++) {
    if (i >= index) {
        storage[i] = storage[i + 1];
    }
}

или даже проще

for (int i = index; i < tailIndex + 1; i++) {
    storage[i] = storage[i + 1];
}
...