黑马程序员技术交流社区
标题:
大家帮忙看下我为什么得不到我想要的结果,去除"abc".
[打印本页]
作者:
提菩--空
时间:
2014-7-13 03:20
标题:
大家帮忙看下我为什么得不到我想要的结果,去除"abc".
本帖最后由 提菩--空 于 2014-7-15 11:43 编辑
public class Test9
{
public static void main(String[] args)
{
ArrayList<String> alist = new ArrayList<String>();
alist.add("sdkfs");
alist.add("abc");
alist.add("hello");
alist.add("abc");
Iterator<String> it = alist.iterator();
while(it.hasNext())
{
if(it.next().equals("abc"))
{
it.remove();
//这边我明明删除了与字符串abc相等的为什么还得不我想的结果
}else{
System.out.println(it.next());
}
}
}
}
作者:
496080891
时间:
2014-7-13 07:46
本帖最后由 496080891 于 2014-7-13 07:54 编辑
while(it.hasNext())
{
//String i = it.next();
if(it.next().equals("abc"))
//if(i.equals("abc"))
{
it.remove();
/*
it.next()是"sdkfs"和"abc"比较
不相同所以执行else语句,所以打印出"abc";
然后回来又执行了it.next(),这时它的值是"hello";
所以又执行了else语句,打印出"abc";
it.next()执行一次,指针就向下走一步;
解决办法:定义变量来接收it.next()的值,
使指针位置不会变。
*/
}else{
System.out.println(it.next());
//System.out.println(i);
}
}
复制代码
作者:
吴俊勇
时间:
2014-7-13 22:57
496080891 发表于 2014-7-13 07:46
{it.next()是"sdkfs"和"abc"比较
是 不相同所以执行else语句,所以打印出"abc";}看不懂
作者:
胥亮
时间:
2014-7-14 07:03
本帖最后由 胥亮 于 2014-7-14 07:04 编辑
楼主首先在if语句中调用了it.next()方法 使指针指到了sdkfs由于和abc不等 所以执行else 在else语句中又执行了it.next()方法 这时指针指向了abc所以打印出abc 下面那一次一样的 判断的是一个值 打印的却是下面的字符串
应该改成
<p> import java.util.*;
public class Test9
{
public static void main(String[] args)
{
ArrayList<String> alist = new ArrayList<String>();
alist.add("sdkfs");
alist.add("abc");
alist.add("hello");
alist.add("abc");
Iterator<String> it = alist.iterator();
while(it.hasNext())
{
String str=it.next();//在这里定义一个零时变量存储一下 对str进行判断
if(str.equals("abc"))
{
it.remove();
}else{
System.out.println(str);
}
}
}
}
</p>
复制代码
作者:
sugar
时间:
2014-7-14 09:10
import java.util.*;
public class Test9
{
public static void main(String[] args)
{
ArrayList<String> alist = new ArrayList<String>();
alist.add("sdkfs");
alist.add("abc");
alist.add("hello");
alist.add("abc");
Iterator<String> it = alist.iterator();
while(it.hasNext())
{
String s=it.next();//这个位置获取一次,你原来的程序获取两次、
if(s.equals("abc"))
{
it.remove();//这边我明明删除了与字符串abc相等的为什么还得不我想的结果
}else{
System.out.println(s);
}
}
}
}
复制代码
循环中it.next();执行两次,才判断it.hasNext()的;
第一次时 "sdkfs"不等于"abc"; 输出的时it.next();这时输出的则是第二元素"abc";
这时候,判断it.hasNext(); 这时it.next()为第三个元素"hello"不等于"abc";又输出it.next();输出的是第四个元素;
每当it.next()时 元素都向下走一个位置;
作者:
lsquare
时间:
2014-7-14 10:24
解决办法:定义变量来接收it.next()的值,
使指针位置不会变。
作者:
idency
时间:
2014-7-14 16:44
Iterator不支持在迭代过程中删除元素,只要改成List专用的ListIterator就ok了
作者:
ddewym123
时间:
2014-7-14 18:33
板凳、报纸说得对!
作者:
奋斗的小耗子
时间:
2014-7-15 00:39
视频教程里有说,在迭代时,循环中的next()被调用一次,就需要hasNext()判断一次,
楼主每一次的循环中,hasNext()对应两次next()
作者:
提菩--空
时间:
2014-7-15 10:06
谢谢大家,我自己也找到了问题所在。
作者:
薛振宇
时间:
2014-7-15 17:20
将“abc”跳过去了,就没比较它
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2