2016-12-10 4 views
-3

안녕하세요.이 LinkedList 개체의 indexOf 메서드를 코딩하는 데 문제가 있습니다. 매번 나는 단지 목록에서 3 개 개의 숫자를 가지고 인덱스가 너무 가장 높은 지수가 2내 'LinkedList'클래스의 'indexOf'메서드가 잘못된 인덱스를 반환하는 이유는 무엇입니까?

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 데이터"로 가장 적합 할 수 있습니다. "prepend"및 "indexOf"메서드에 대해 매개 변수 유형 "E"를 전달합니다. 제네릭이 의도 한 용도 일 수 있습니다. –

답변

0
if (current==(e)) 

에 필요한 것 0에서 시작하기 때문에 "인덱스"는 거짓 3을 반환 반환하는 시도 be

if (current.data.equals(e)) 

그러나 이것이 결과적으로 3을 얻는 방법을 설명하지는 않습니다.

명확한 설명 : ". 당신이 결과로 삼을 얻을 것이라고하지만 어떻게이 설명하지 않습니다"

나는 O.P.가 결과적으로 실제로 3을 얻는 지 확신하지 못합니다. 코드를 살펴보면 명백한 버그를 발견했지만 원래 질문에 대한 이해와 말씨에 의문을 제기했습니다.

이 점을 염두에 두면서 완벽한 대답을 의미했습니다.

+0

이 '버그'에 대해 언급 할 수 있겠습니까? 지금 당장은 대답이 실제로 무엇인지 명확하지 않기 때문입니다. – Li357

+0

수정 사항 : "if (current.data.equals (e))". 나는 나의 부정확 함과 편협함 때문에 잠이 필요하다는 것을 알 수있다. 잘 자. –