Почему класс Linked List не показывает метод add правильно в myeclipse 2013 pro на macos x

1

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

проблема

1 l.add(p) в коде показывает ошибку, когда я пытаюсь принимать числа от 1 до 10

и когда я ставлю l.add("p"); // нет ошибки, почему?

2 При попытке получить Integer Object я не мог применять оператор modulas, но почему?

Вот приложение пакета кода; import java.util. *; public class IteratorDeo1 {public static void main (String s []) {

    LinkedList l=new LinkedList();
        for(int p=0;p<=10;p++)
            {
              l.add("p"); 
            //l.add(p); here 1st  error comes why
            }
    System.out.println(l);
    Iterator i=l.iterator();
    while(i.hasNext())
    {
        Integer I=(Integer)i.next();
        if( I % 2 == 0 )  here comes 2nd error
          System.out.println(I);
        else
            i.remove();
    }
    System.out.println(l);
}
  • 1
    Ваш цикл for, вероятно, не делает то, что вы думаете, но это трудно понять из этого фрагмента. Дополнительные фигурные скобки на практике не являются обязательными. Мой совет всегда использовать их.
Теги:
collections

1 ответ

2
Лучший ответ

Вы хранение "p" в 11 раз, что является буквальной String, а не Integer. После добавления "p" вы добавляете "2" который является еще одним литералом String, а не Integer.

Чтобы убедиться, что вы добавляете Integer или объект определенного типа, вы должны использовать generics:

LinkedList<Integer> l=new LinkedList<Integer>();
for(int p=0;p<=10;p++)
    l.add("p"); // compiler error here: you're adding a String, not an Integer

Если вы используете Java 1.4 или ранее (что очень странно в это время), то вы не можете использовать generics, но вы по-прежнему можете защитить себя от этого ClassCastException, используя оператор instanceof:

Iterator i=l.iterator();
while(i.hasNext()) {
    Object current = i.next();
    if (current instanceof Integer) {
        Integer I = current;
        //rest of your code...
    }
}

Кроме того, unboxing и autoboxing находятся на Java с версии 5. В Java 1.4 или ранее вам необходимо получить значение int обертки и выполнить оператор модуля вручную:

if (I.intValue() % 2 == 0) {
    //rest of code...
}
  • 0
    да, это проблема. Я хочу добавить целые числа. Это не позволяет мне показывать ошибку.
  • 0
    Ну, теперь вы знаете проблему. Просто добавьте к вашему LinkedList реальные Integer , а не String .
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню