Java не може знайти символ зі зв'язаним списком

Я намагаюся запитати, чи містить список певний рядок.

public void searchList(Scanner scan, Object list){


    System.out.println("Search for element:\t");
    String p = scan.nextLine();

    if (list.contains(p))
        System.out.println(p + " is in the list");
    else
        System.out.println(p + " is not in the list.");
}

Я отримую:

Prog7Methods.java:23: cannot find symbol
symbol  : method contains(java.lang.String)
location: class java.lang.Object
        if (list.contains(p))

Я не розумію! Я імпортував java.io. * і java.util. * Як це не визнає це?

0
Я зараз намагаюся викликати список пошуків з іншого класу з pm.searchList (сканування, список); Я отримую це: MyProgram7.java:53: searchList (java.util.Scanner, java.util.List) у Prog7Methods не можна застосувати до (java.util.Scanner, MyList ) case 3: pm.searchList (сканування, список);
додано Автор Josh, джерело
Привіт Джош. Чи впроваджує MyList інтерфейс списку? Ознайомтеся з моєю відповіддю нижче для деяких вказівок щодо методів та інтерфейсів і т. Ін.
додано Автор Steve J, джерело

6 Відповіді

list is a Object and Object does not have contains method. You need to cast it to a List first to call contains method. Or, you can change the method signature to receive a List.

1
додано
Ви можете зробити це List linkedList = (LinkedList) список; і call method містить в об'єкті linkedList . Проте найкраще намагатися змінити підпис методу, щоб забезпечити вхідний об'єкт як List . Кастинг може призвести до винятків для часу виконання, якщо вхідний об'єкт не є типом List .
додано Автор Narendra Yadala, джерело
@Josh Як ви оголосили List у своєму класі/методі дзвінка? В класі абонента має бути List list = new LinkedList .
додано Автор Narendra Yadala, джерело
@Josh Що таке MyList та MyArrayList . Вони, здається, не мають типу List . Оголосіть це в класі абонента List list = new LinkedList () і додайте рядки до об'єкта цього списку, а потім зателефонуйте pm.searchList (сканування, список) . Будь ласка, займіть час, щоб прочитати хороший підручник з Collections , як це java.sun.com/developer/onlineTraining/collections/…
додано Автор Narendra Yadala, джерело
як це зробити?
додано Автор Josh, джерело
Тепер я отримую помилку під час спроби дзвонити, будь ласка, перегляньте вище
додано Автор Josh, джерело
MyList list = new MyArrayList (); Це в класі, з якого я намагаюся викликати
додано Автор Josh, джерело

Because there is no Object.contains() method. Your method signature should probably be (Scanner, List) not (Scanner, Object)

1
додано

Вам слід оголосити список як список. Замість

public void searchList(Scanner scan, Object list){

використовувати

public void searchList(Scanner scan, List list){

або ще краще:

 public void searchList(Scanner scan, List list){
1
додано
Я отримую помилку, коли намагаюся зателефонувати pm.searchList (сканувати, перерахувати) з іншого класу.
додано Автор Josh, джерело

Подивіться на Об'єкт . Всі класи Java є підкласом Object, і тому всі класи Java успадковують методи clone (), equals (), finalize (), hashCode() і так далі.

contains() не в тому списку методів Object. містить() поставляється з іншого місця - інтерфейсу з назвою Колекція . Інтерфейс визначає контракт для деякого класу (і всі класи в кінцевому рахунку є об'єктами), що контракт є переліком методів, які повинні бути реалізовані. Колекція визначає метод contains() і все, що реалізує інтерфейс Collection, включаючи будь-яку Список

Коли ви вводите список у ваш метод searchList (), ви передаєте його через параметр Object. Це означає, що в межах searchList() єдиними методами, які можна викликати, є ті, що визначені для Object, навіть якщо список у вашому виклику до searchList() дійсно є деяким певним списком. У деякому сенсі список ваших параметрів "вичерпав" список параметрів списку.

Що потрібно зробити, як вже згадувалося, це змінити параметр на Колекцію або Список. Таким чином, у вашому методі searchList (), компілятор Java знає, що параметр "list" дійсно є списком, і тому дійсно є метод content ().

Зауважте, що список також є інтерфейсом, і він включає інтерфейс Collection, розширюючи його. Тому кожен клас, який реалізує інтерфейс List, повинен забезпечити методи в Collection, а також додаткові методи List. Чи слід використовувати список або колекцію? Моя думка - використати найменший обмежений вибір. Схоже, що ваш пошуковий список() використовує лише contains (), так що насправді він буде працювати на будь-якому застосуванні колекції, зокрема, наприклад,

Налаштувати .

Тому я б перейменував ваш метод з посилання на те, де ви шукаєте (всередині списку), до того, що ви шукаєте (наступна лінія).

public void searchForNextLine(Scanner scan, Collection lines){


    System.out.println("Search for element:\t");
    String p = scan.nextLine();

    if (lines.contains(p))
        System.out.println(p + " is in the collection of lines");
    else
        System.out.println(p + " is not in the collection of lines.");
}

Тепер, скажімо, ви впровадили свій список за допомогою ArrayList . Пізніше ви передумаєте, вирішивши, що TreeSet краще Цей метод searchForNextLine() продовжуватиме працювати, оскільки і TreeSet, і ArrayList є реалізаціями Collection. Ще краще, якщо ви вирішите скласти свій клас списку (і ви впевнені, що хочете отримати справжній список, а не якийсь інший сорт колекції), то до тих пір, поки ви реалізуєте інтерфейс списку, ви будете змушені надавати contains() (тому що ви також будете реалізовувати інтерфейс Collection як частину реалізації інтерфейсу List), і ви можете передавати об'єкт вашого нового класу в searchForNextLine (), впевнений, що він буде чудово працювати без будь-яких змін .

public class MyListClass implements List {
 //all the methods required to implement a List interface
}
1
додано

list is an Object not a List. If you think it is a LinkedList then change the method signature. If not, make a cast but do an instanceof.

0
додано

Помилка виводу компілятора цілком зрозуміла. Ваша переменна списку - це не тип списку, а об'єкт. Об'єкт не має методу "містить". Змінити

Object list

до

List list

або (Java 1.4 та вище)

List list
0
додано
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників