2016-12-10 4 views
-3

こんにちは私はオブジェクトのこのLinkedListindexOfメソッドをコーディングするのに問題があります。毎回私は「インデックス」私は、リスト内の3つの数字を持っているので、それが偽である3を返し、インデックスは0から始まるので、最高の指数は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"を返し、ノードを正しく比較しないので、あなたの現在のコードが何かを見つけることができるのだろうかと思います。 *ノード*を比較することさえありません。明らかに動作できない数字に対して1つのノードだけが比較されます。 – Tom

+0

上記のコードでさらに2つの提案をしたいと思います。「パブリックオブジェクトデータ」は、「パブリックEデータ」として最適かもしれません。また、 "prepend"と "indexOf"メソッドにはパラメータ型 "E"を渡します。私はこれがジェネリック薬の意図された使用かもしれないように見えます。 –

答えて

0
if (current==(e)) 

だろうが、する必要があります返すようにしようとしましたbe

if (current.data.equals(e)) 

1つです。しかしこれは結果として3を得る方法を説明していません。

明確化:

「しかし、これはあなたが、結果として3を取得したい方法を説明していません。」

O.P.が実際に結果として3を得ているかどうかはわかりません。コードを見ると、明らかなバグが見つかりましたが、元の質問の理解と表現には疑問があります。

これを念頭に置いて、これは完全な答えを意味していました。

+0

これは「バグ」と言えますか?今のところ、答えが本当に何であるかはまだ不明です。 – Li357

+0

改訂: "if(current.data.equals(e))"。私は自分の不正確さと不寛容によって私が睡眠を必要とするのを見ることができます。おやすみなさい。 –

関連する問題