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(scan、list)で別のクラスから検索リストを呼び出そうとしています。私はこれを取得しています:Prog7Methods内のMyProgram7.java:53:searchList(java.util.Scanner、java.util.List)は(java.util.Scanner、MyList )には適用できませんケース3: pm.searchList(スキャン、リスト);
追加された 著者 Josh,
こんにちはジョシュ。 MyListはListインターフェイスを実装していますか?メソッドやインターフェースなどのガイダンスについては、私の答えを見てください。
追加された 著者 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)list; を実行し、 linkedList オブジェクトのメソッドを呼び出すことができます。しかし、より良い方法は、着信オブジェクトを List にするようにメソッドのシグネチャを変更することです。入ってくるオブジェクトが List 型でない場合、キャストすると実行時例外が発生する可能性があります。
追加された 著者 Narendra Yadala,
@Josh呼び出し元クラス/メソッドで List をどのように宣言しましたか?呼び出し側クラスの List list = new LinkedList である必要があります。
追加された 著者 Narendra Yadala,
@Josh MyListMyArrayList は何ですか?それらは List タイプではないようです。呼び出し元クラス List list = new LinkedList ()でこのように宣言し、このリストオブジェクトに文字列を追加して、 pm.searchList(scan、list) 。このような Collections の良いチュートリアルを読むには時間をかけてください java.sun.com/developer/onlineTraining/collections/…
追加された 著者 Narendra Yadala,
私はこれをどうやってやるの?
追加された 著者 Josh,
電話をしようとするとエラーが表示されます。上記を参照してください
追加された 著者 Josh,
MyList list =新しい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(scan、list)を呼び出そうとするとエラーになります。
追加された 著者 Josh,

オブジェクトを勉強してください。すべてのJavaクラスはObjectのサブクラスなので、すべてのJavaクラスはclone()、equals()、finalize()、hashCode()などのメソッドを継承します。

contains()はObjectメソッドのリストにありません。 contains()は別の場所から来ます - というインターフェースコレクション。インタフェースは、実装されなければならないメソッドのリストである、あるクラス(そしてすべてのクラスは最終的にオブジェクトです)のコントラクトを定義します。 Collectionは、contains()メソッドと、 List 実装クラスでは、contains()メソッドを提供する必要があります。

searchList()メソッドにリストを渡すときは、Objectパラメータを渡します。これはsearchList()内で、searchList()への呼び出しのリストが本当に何らかの並べ替えのリストであっても、呼び出すことのできるメソッドだけがObjectに定義されているメソッドであることを意味します。ある意味では、パラメータ・リストはリスト・パラメータのリスト・レベルを「洗い流し」ました。

前述のとおり、パラメータをCollectionまたはListに変更する必要があります。こうすることで、searchList()メソッドの中で、Javaコンパイラは "list"パラメータが本当にListであることを知っているので、本当にcontains()メソッドがあります。

Listはインターフェイスでもあり、Collectionインターフェイスを継承しています。したがって、Listインターフェイスを実装するすべてのクラスは、Collectionのメソッドと追加のListメソッドを提供する必要があります。リストやコレクションを使うべきですか?私の意見は、最小の制約のある選択肢を使うことです。 searchList()は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とArrayListの両方がCollectionの実装であるため、このsearchForNextLine()メソッドは引き続き機能します。あなた自身のリストクラスをロールすることを決めた場合(実際のListを必要とし、他のコレクションではないことを確信していれば)、Listインターフェースを実装していれば、 contains()メソッド(Listインタフェースの実装の一部としてCollectionインタフェースも実装しているので)、新しいクラスのオブジェクトを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
追加された

コンパイラのエラー出力は非常に明確です。リスト変数はリストタイプではなくオブジェクトです。オブジェクトにはメソッド "contains"がありません。 変化する

Object list

List list

または(Java 1.4以前)

List list
0
追加された