2
import java.io.*;
import javax.swing.JOptionPane;
import java.util.*;

public class lesson {
     static void printAll(ArrayList<String> names, int len)
      {
         Iterator it = names.iterator();
         while( it.hasNext() )
         {
         if( ((String)it.next()).length() == len)
         System.out.println( it.next() );
         }
      }
    public static void main(String[] args) throws IOException {
        ArrayList<String> names = new ArrayList<String>();
        names.add("Jan");
        names.add("Ivan");
        names.add("Tom");
        names.add("George");
        printAll(names,3);
    }
}

長さ 3 の名前 (Jan と Tom) だけを出力すべきではないのはなぜですか?

4

7 に答える 7

5
if( ((String)it.next()).length() == len)
         System.out.println( it.next() );
         }

it.next()イテレータを 1 つの要素に進めます。あなたはit.next()2回やっています。

if( ((String)it.next()).length() == len)1 回進み、イテレータが next() を指すようになりました

以下のように変更します。

 it.next() prints next() element in iterator.
      {
       //Get once.
        String nextName = (String)it.next();
         if( nextName .length() == len)
         System.out.println(nextName  );
       }
于 2012-10-31T20:26:57.617 に答える
4

強化された forループの使い方を学んでください。そうすれば、あなたが犯した間違いを防ぐことができます。

 static void printAll(ArrayList<String> names, int len)
 {
     for (String name : names) {
       if (name.length() == len)
         System.out.println( name );
     }
 }
于 2012-10-31T20:28:30.703 に答える
2

iterator.next() を 2 回呼び出していると、2 回目の呼び出しが進みます。以下のアプローチに従い、変数に格納してチェックを行います

 Iterator it = names.iterator();
   String next =(String)it.next(); 
         while( it.hasNext() )
         {
         if( (next).length() == len)
         System.out.println( next );
         }
于 2012-10-31T20:27:35.303 に答える
2

it.next()以下を変更して、1 つの要素の長さと可用性を比較し、もう 1 つの要素を出力しようとするため、2 つの呼び出しを回避します。

    while( it.hasNext() )
     {
       if( ((String)it.next()).length() == len)
       System.out.println( it.next() );
     }

    while( it.hasNext() )
     {
       String element = (String)it.next();
       if(element.length() == len)
          System.out.println( element);
     }
于 2012-10-31T20:28:52.107 に答える
2

値が 2 回必要な場合は、変数に格納します。2回呼び出すと、イテレータが先に進むため、印刷中にその結果が得られます

while( it.hasNext() )
     {
       String str = it.next();
        if( (str.length() == len)
          System.out.println(str);
     }
于 2012-10-31T20:28:55.070 に答える
1

への呼びかけit.next()

  1. コレクション内の現在の要素を返します。
  2. そしてイテレータの位置を進めます。

next()ループの本体で 2 回呼び出します。一度だけ呼び出すようにする必要があります。

for (Iterator<String> it = names.iterator(); it.hasNext();) {
    String name = it.next();
    if (name.length() == len) {
        System.out.println(name);
    }
}

または、強化された for ループを使用します。

for (String name : names) {
    if (name.length() == len) {
        System.out.println(name);
    }
}
于 2012-10-31T20:34:22.680 に答える
0

これはあなたが望むことをするはずです。ArrayListからのすべての文字列の3文字のみを出力します。

import java.io.*;
import javax.swing.JOptionPane;
import java.util.*;

public class lesson {
 static void printAll(ArrayList<String> names, int len)
  {
     for (String s : names)
     if (s.length() == len)
     {
     System.out.println(s);
     }
  }
  public static void main(String[] args) throws IOException {
    ArrayList<String> names = new ArrayList<String>();
    names.add("Jan")
    names.add("Ivan");
    names.add("Tom");
    names.add("George");
    printAll(names,3);
   }
}
于 2012-10-31T20:32:25.490 に答える