удаление всех ложных элементов из связанного списка в Java - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть связанный список данных рыбы, показанный здесь

 //create linked list of fish data called fl
    LinkedList<FishData> fl = new LinkedList<FishData>();
    //Here are a few data items
    fl.add(new FishData("American Eel ", 9, "Summer/Spring ", 25 , false));
    fl.add(new FishData("Hammerhead Shark ", 0, "All Year ", 36, false));
    fl.add(new FishData("Horseshoe Crab ", 7, "All Year except May ", 60, false));
    fl.add(new FishData("Haddock ", 18, "All Year ", 0, true));
    fl.add(new FishData("Tautog ", 16, "late Spring to end of year ", 3, true));

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

Iterator itr = fl.iterator();
    while (itr.hasNext()) {
        boolean w = (boolean) itr.next();
        if (w = false)
            itr.remove();
    }

ОБНОВЛЕНИЕ:

, поэтому я отредактировал код и ятеперь у меня есть

 Iterator<FishData> itr = fl.iterator();
    while (itr.hasNext()) {
        FishData b = (FishData) itr.next();
        if (!b.w) {
            itr.remove();
        }
    }
    for (FishData element : fl) {
        System.out.println(element);
    }
}

, ранее я использовал цикл for для печати всего списка, но когда я его сейчас использую, ничего не печатается

1 Ответ

0 голосов
/ 26 сентября 2018

itr.next() вернет следующий элемент в вашем LinkedList, который будет FishData объектом.Вы не можете привести это к логической переменной.Вместо этого вы хотите получить доступ к логической переменной объекта fishData.Итак, предполагая, что ваш класс FishData имеет логическую переменную someCondition, вы можете сделать:

while (itr.hasNext()) {
    boolean w = itr.next().someCondition;
    if (w = false)
        itr.remove();
}

Или, если это переменная private, и у вас есть метод получения:

while (itr.hasNext()) {
    boolean w = itr.next().isSomeCondition();
    if (w = false)
        itr.remove();
}

Также строка if(w = false) неверна.= является оператором присваивания.Вам либо нужно сделать if(w == false) или if(!w).Или вы можете упростить это до:

while (itr.hasNext()) {
    if (!itr.next().isSomeCondition())
        itr.remove();
}

Кроме того, вам необходимо создать более конкретную Iterator:

Iterator<FishData> itr = fl.iterator();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...