java中的集合map问题
importjava.util.HashMap;importjava.util.Iterator;publicclassMapTest{publicstaticvoidm...
import java.util.HashMap;
import java.util.Iterator;
public class MapTest
{
public static void main(String[] args)
{
HashMap map = new HashMap();
map.put("a", "zhangsan");
map.put("b", "lisi");
map.put("d", "wangwu");
map.put("e", "zhaoliu");
map.put("f", "yangqi");
for(Iterator iter = map.keySet().iterator();iter.hasNext();)
{
System.out.println(iter.next());
System.out.println( map.get(iter.next()));
}
}
中的
System.out.println(iter.next());
System.out.println( map.get(iter.next()));
如果注释一行运行一行都能成功,两个放一起就不成功了,为什么,求高手指点
Exception in thread "main" java.util.NoSuchElementException
at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
at java.util.HashMap$KeyIterator.next(Unknown Source)
at fx.MapTest.main(MapTest.java:23)
f=wangwu
e=lisi
这是错误我是菜鸟看不懂,求帮助。
我懂了谢谢各位了 展开
import java.util.Iterator;
public class MapTest
{
public static void main(String[] args)
{
HashMap map = new HashMap();
map.put("a", "zhangsan");
map.put("b", "lisi");
map.put("d", "wangwu");
map.put("e", "zhaoliu");
map.put("f", "yangqi");
for(Iterator iter = map.keySet().iterator();iter.hasNext();)
{
System.out.println(iter.next());
System.out.println( map.get(iter.next()));
}
}
中的
System.out.println(iter.next());
System.out.println( map.get(iter.next()));
如果注释一行运行一行都能成功,两个放一起就不成功了,为什么,求高手指点
Exception in thread "main" java.util.NoSuchElementException
at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
at java.util.HashMap$KeyIterator.next(Unknown Source)
at fx.MapTest.main(MapTest.java:23)
f=wangwu
e=lisi
这是错误我是菜鸟看不懂,求帮助。
我懂了谢谢各位了 展开
6个回答
展开全部
iter.next()
当遍历到最后一个的时候
正好被iter.next()打印出来了
然后又要打印下一个 这时已经没有下一个了
所以会报错
解决方法有两个
hashtable添加一对key和value
或者用推荐答案的方法
感觉你想表达的也是 先打印key 然后打印对应的value
就用用object方法就行
for(Iterator iter = map.keySet().iterator();iter.hasNext();)
{
Object obj = iter.next();
System.out.println(obj);
System.out.println( map.get(obj));
}
当遍历到最后一个的时候
正好被iter.next()打印出来了
然后又要打印下一个 这时已经没有下一个了
所以会报错
解决方法有两个
hashtable添加一对key和value
或者用推荐答案的方法
感觉你想表达的也是 先打印key 然后打印对应的value
就用用object方法就行
for(Iterator iter = map.keySet().iterator();iter.hasNext();)
{
Object obj = iter.next();
System.out.println(obj);
System.out.println( map.get(obj));
}
展开全部
public static void main(String[] args)
{
HashMap map = new HashMap();
map.put("a", "zhangsan");
map.put("b", "lisi");
map.put("d", "wangwu");
map.put("e", "zhaoliu");
map.put("f", "yangqi");
for(Iterator iter = map.keySet().iterator();iter.hasNext();)
{
Object obj = iter.next();
System.out.println(obj);
System.out.println( map.get(obj));
}
}
楼主,你的for循环里面调用了两次iter.next()方法,这是不行的,调用一次迭代一次,你的程序最后当然会报错啊,你的for循环条件还满足,但实际上你的迭代器已经迭代完毕了,所以报错,上面是我帮你修改的代码,希望对你有帮助。
{
HashMap map = new HashMap();
map.put("a", "zhangsan");
map.put("b", "lisi");
map.put("d", "wangwu");
map.put("e", "zhaoliu");
map.put("f", "yangqi");
for(Iterator iter = map.keySet().iterator();iter.hasNext();)
{
Object obj = iter.next();
System.out.println(obj);
System.out.println( map.get(obj));
}
}
楼主,你的for循环里面调用了两次iter.next()方法,这是不行的,调用一次迭代一次,你的程序最后当然会报错啊,你的for循环条件还满足,但实际上你的迭代器已经迭代完毕了,所以报错,上面是我帮你修改的代码,希望对你有帮助。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
java.util.NoSuchElementException
这个错误的意思是没有元素可以迭代
产生错误的原因是你在for 循环中写入两次迭代 iter.next()
这个错误一般是循环到最后一个元素的时候才会报错,
当集合中只有最后一个元素,在第一个iter.next() 的时候是正常的
但是在 第二个 map.get(iter.next()) 的是就没有元素可以迭代了,
所以就报错了,希望对你有帮助,其它楼的解释也都很不错。
这个错误的意思是没有元素可以迭代
产生错误的原因是你在for 循环中写入两次迭代 iter.next()
这个错误一般是循环到最后一个元素的时候才会报错,
当集合中只有最后一个元素,在第一个iter.next() 的时候是正常的
但是在 第二个 map.get(iter.next()) 的是就没有元素可以迭代了,
所以就报错了,希望对你有帮助,其它楼的解释也都很不错。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
两个放一起就相当于你只问一次iter.hasNext(),却叫了两次iter.netxt()。就好像你问:后面还有东西吗?然后连说两次“再来一个”,第一次再来一个的时候有可能已经是最后一个了,第二次说再来一个的时候就没有东西了,于是出错。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询