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);
}
}
为什么输出Ivan,George,不应该只打印长度为3的名字(Jan和Tom)?
答案 0 :(得分:5)
if( ((String)it.next()).length() == len)
System.out.println( it.next() );
}
it.next()
将迭代器推进到一个元素。你正在做it.next()
两次。
if( ((String)it.next()).length() == len)
前进一次,现在迭代器指向next()
将其更改为以下内容:
it.next() prints next() element in iterator.
{
//Get once.
String nextName = (String)it.next();
if( nextName .length() == len)
System.out.println(nextName );
}
答案 1 :(得分:4)
帮自己一个忙,并学会使用增强的循环,它会阻止你犯下你做的错误:
static void printAll(ArrayList<String> names, int len)
{
for (String name : names) {
if (name.length() == len)
System.out.println( name );
}
}
答案 2 :(得分:2)
你正在调用iterator.next()两次,第二次调用会提前。按照以下方法,将其存储在变量中并进行检查
Iterator it = names.iterator();
String next =(String)it.next();
while( it.hasNext() )
{
if( (next).length() == len)
System.out.println( next );
}
答案 3 :(得分:2)
更改以下内容以避免两次it.next()
次调用,因为它会比较一个元素的长度和可用性,并尝试打印另一个元素。
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);
}
答案 4 :(得分:2)
如果您想要两次值,则将其存储在某个变量中。如果你调用它两次,那么你的迭代器就会向前移动,这就是为什么在打印它时会给你结果
while( it.hasNext() )
{
String str = it.next();
if( (str.length() == len)
System.out.println(str);
}
答案 5 :(得分:1)
致电it.next()
你在循环体中调用next()
两次。你应该确保只调用一次:
for (Iterator<String> it = names.iterator(); it.hasNext();) {
String name = it.next();
if (name.length() == len) {
System.out.println(name);
}
}
或使用增强型循环:
for (String name : names) {
if (name.length() == len) {
System.out.println(name);
}
}
答案 6 :(得分: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);
}
}