0

Nameというカスタムオブジェクトを使用するJavaLinkedListを検索しようとしています。名で検索する必要があります(NameのcompareToメソッドは、名前で並べ替えるために使用する必要があるため、すでに名前を比較しています)。Nameには、getFirstName()というオブザーバーメソッドがあります。

LinkedListから名にアクセスできません。これは私がやりたいことですが、これは(明らかに)機能しません。

if (iterator.next().getFirstName().equals(inputSearch))

誰かが私を正しい方向に向けることができますか?

これは私が現在書き込もうとしている完全なメソッドです。

// Creating a method to search for a first name
  static void searchName()
{
  Scanner inData = new Scanner(System.in);

  // Label to request input from user
  System.out.println("Enter the first name that you would like to search for:");

  // Setting variable to capture input
  String inputSearch = inData.next();

  // Creating an iterator to search through the list
  iterator = list.iterator(); 

  // While loop to search each entry
  while (iterator.hasNext())
  {
      if (iterator.next().getFirstName().equals(inputSearch))
      {
          System.out.println("MATCH FOUND: " + iterator.next());
      }
  }
} 
4

2 に答える 2

2

iterator.next()2回電話しています。2回目は、必要なアイテムを超えて進みます。代わりに、への最初の呼び出しからの戻り値を保存してiterator.next()使用します。

  while (iterator.hasNext())
  {
      Name item = (Name) iterator.next();

      if (item.getFirstName().equals(inputSearch))
      {
          System.out.println("MATCH FOUND: " + item);
      }
  }

または、より慣用的に

  for (Name item : list)
  {
      if (item.getFirstName().equals...
  }
于 2012-10-22T23:03:14.257 に答える
2
while (iterator.hasNext())  {  
   if (iterator.next().getFirstName().equals(inputSearch)) {  //iterator.next()          
                   System.out.println("MATCH FOUND: " + iterator.next());  //iterator.next()     
     }   
 } 

next()を2回呼び出しているので、印刷中は次のオブジェクトになります。

iterator.next()が返すものを対応するタイプに格納し、成功した場合はそれを使用して比較および出力してみてください。

元:

while(iterator.hasNext(){
   Name name=iterator.next();
  if(name.getFirstName().equals(inputSearch)){
      System.out.println("Match Found"+name);
     }
}

これは私が間違っていると思うものです。他に何も気づいていません。

于 2012-10-22T23:04:17.350 に答える