2016-12-10 9 views
-3

Привет, у меня возникла проблема с кодированием метода indexOf этого LinkedList объектов. Каждый раз я пытался вернуть «индекс» возвращает 3, который является ложным, потому что у меня только 3 номера в списке и индекс начинается с 0, так что самый высокий показатель был бы 2.Почему метод 'indexOf' моего собственного класса LinkedList возвращает неверный индекс?

import java.util.Scanner; 
import java.util.*; 

public class LinkedList<E> 
{ 
    static Scanner in = new Scanner (System.in); 

    protected class Node<E> { 
     public Object data; 
     public Node<E> next; 
     public Node(Object data) 
     { 
      this.data = data; 
     } 
    } 

    protected Node<E> first = null; 

    public void prepend(Object e) 
    { 
     Node<E> newnode = new Node<E>(e); 
     newnode.next = first; 
     first = newnode; 
    } 

    public int indexOf(Object e) 
    { 
     int index = 0; 
     Node<E> current = first; 

     while (current != null) 
     { 
      System.out.println(index); 
      if (current == e) 
      { 
       return index; 
      } 
      index++; 
      current = current.next; 
     } 
     return -1; 
    } 

    public static void main(String[] args) 
    { 
     LinkedList<Integer> list = new LinkedList<Integer>(); 
     list.prepend(new Integer(1)); 
     list.prepend(new Integer(2)); 
     list.prepend(new Integer(3)); 
     System.out.println(list.indexOf(2)); 
    } 
} 
+1

Ваш код возвращает «-1» для меня, и мне интересно, как ваш текущий код мог что-то найти, поскольку он не сравнивает узлы правильно. Он даже не сравнивает * узлы *, а только один узел против числа, который, очевидно, не может работать. – Tom

+0

Я хотел бы сделать еще два предложения по вашему коду выше: «общедоступные данные объекта» могут быть лучше всего как «общедоступные данные E». И передайте тип параметра «E» для методов «prepend» и «indexOf». Похоже, это может быть ваше намеренное использование дженериков. –

ответ

0
if (current==(e)) 

потребуется be

if (current.data.equals(e)) 

для одного. Но это не объясняет, как вы получите 3 в результате.

Разъяснение:

«Но это не объясняет, как вы получите 3 в результате.»

Я не уверен, что O.P. фактически получает 3 в результате. Глядя на код, я обнаружил явную ошибку, но задаюсь вопросом их понимания и формулировки их первоначального вопроса.

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

+0

Не могли бы вы упомянуть об этом «ошибке», потому что сейчас все еще неясно, каков ответ на самом деле. – Li357

+0

Исправленный вариант: "if (current.data.equals (e))". Я вижу по моей неточности и нетерпимости, что мне нужен сон. Спокойной ночи. –

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