2014-11-08 4 views
0
public boolean contains(Object data) 
{ 
    Node temp = new Node(data); 
    Node current = head.getNext(); 

    for(int i = 0; i < size(); i++) 
    { 
     //System.out.println(current.getData()); 
     if(temp.getData() == current.getData()) 
     { 
      System.out.println("true"); 
      return true; 
     } 
     else 
     { 
      current = current.getNext(); 
     } 
    } 
    return false; 
} 

Мой код выше, и он возвращает false, несмотря ни на что. Если он находит истинное условие, он печатает «true», и он все равно возвращает false. Что я здесь делаю неправильно? У меня точно такой же функции, за исключением того, что возвращается целое число, а не логическое значение, и он отлично работает с тем же методом/code.4Почему моя функция всегда возвращает false, даже если она находит возвращаемое значение true раньше?

Моя функция, которая делает то же самое и работает отлично:

public int indexOf(Object data) 
{ 
    Node temp = new Node(data); 
    Node current = head.getNext(); 

    for(int i = 0; i < size(); i++) 
    { 
     if(temp.getData() == current.getData()) 
     { 
      return i; 
     } 
     current = current.getNext(); 
    } 

    return -1; 
} 
+1

Вам нужно будет добавить больше контекста. Мы не можем просто догадываться. Предоставьте полностью воспроизводимый пример. –

+0

@SotiriosDelimanolis Все, что я делаю, это 'if (LL.contains (" something ") == true) // print' – user12831239

+0

Как вы сравниваете строки в Java? Я сомневаюсь, что печатает '' true ''. –

ответ

2

Вы» ве получили проблемы с этим выражением:

if(temp.getData() == current.getData()) 

это достаточно плохо, что ваши данные представлены Object - это действительно должна быть параметризованным тип * вместо этого. Но, поскольку вы используете ==, вы проверяете, является ли объект тем же самым экземпляром, если они эквивалентны.

Изменить вместо сравнения .equals.

if(temp.getData().equals(current.getData()) 

*: В случае, если вам интересно, вы бы изменить ваш Node к Node<T> вместо этого, изменить связанный экземпляр списка для наберется в LinkedList<Node<T>> и изменить метод аргумент contains быть public boolean contains(T data).

Смежные вопросы