列表迭代器卡住-Java
Posted
技术标签:
【中文标题】列表迭代器卡住-Java【英文标题】:List Iterator getting stuck-Java 【发布时间】:2013-05-26 22:47:45 【问题描述】:我有一个包含以下数据的文件
1^ 我讨厌那部手机,它从来没有按照我说的去做,响应时间很慢,网络,并且会不断地崩溃,因为我会在手机上加载太多的应用程序或视频,我认为我的豆荚应该是为媒体驱动的人准备的。如果您不介意手机被锁定或每隔几天就必须将其恢复出厂设置。#
2^ 该设备是第一款真正有很多工作要做的高级设备,漏洞非常少,并且是所有智能手机中最好的浏览器。 I phone 3G 和 3G 革新了我们今天制造智能手机的方式。#
每行用“#”分隔,每行用“^”分隔 我将它们存储在列表中并打印它们。 代码(如下所示)正在正确打印 2 行,但之后卡住并且没有退出。我不知道问题出在哪里。请帮忙。
FileReader fr=new FileReader("comments.csv");
Scanner sc= new Scanner(fr);
sc.useDelimiter("#");
ArrayList<ArrayList<String>> listoflists= new ArrayList<ArrayList<String>>();
ArrayList<String> singlist= new ArrayList<String>();
while(sc.hasNext())
String line=sc.next();
String[] element=line.split("\\^");
for( int i=0; i< element.length;i++)
singlist.add(element[i]);
bw.write(element[i]);
bw.newLine();
//System.out.print(element[i]+"\n");
listoflists.add(singlist);
// it running properly till this part without getting stuck in infinite loop
ListIterator<String> iter1=singlist.listIterator();
ListIterator<ArrayList<String>> iter2=listoflists.listIterator();
while(iter2.hasNext())
while(iter1.hasNext())
System.out.println(iter1.next());
谢谢
【问题讨论】:
iter2 未转发;所以 iter2.hasNext() 将永远为真。在某处调用 iter2.next() 使用 foreach 循环避免此类错误:for (List<String> singleList : listOfLists) for (String s : singleList) ...
@vpram86 成功了!谢谢,但是如果指针没有转发,迭代器如何打印第二行数据?(因为我将这两行都作为输出):/
第一个 while 是真的,所以我们去第二个。也是真的,所以我们打印第一个值,然后它又是真的,所以我们打印第二个值,然后它是假的,所以我们回到第一个while,没有别的可做,但它仍然是真的,所以我们再次输入它,但第二个 while 是假的,我们什么也不做,并完成第一个 while,这仍然是真的,所以我们输入它并...
【参考方案1】:
这段代码是无限循环的:
while(iter2.hasNext())
while(iter1.hasNext())
System.out.println(iter1.next());
因为您不会移动到iter2
并且它总是指示第一项。
这应该可以解决问题:
while(iter2.hasNext())
while(iter1.hasNext())
System.out.println(iter1.next());
iter2.next();
【讨论】:
【参考方案2】:我认为你想做的是
ListIterator<ArrayList<String>> iter2 = listoflists.listIterator();
while(iter2.hasNext())
List temp = iter2.nextElement();
ListIterator<String> iter1 = temp.listIterator();
while(iter1.hasNext())
System.out.println(iter1.next());
【讨论】:
成功了!谢谢,但是如果指针没有转发,迭代器如何打印第二行数据?(因为我将这两行都作为输出)【参考方案3】:你没有调用 iter2.next(),所以它会无限迭代。
while(iter2.hasNext())
while(iter1.hasNext())
System.out.println(iter1.next());
iter2.next();
【讨论】:
【参考方案4】:显然没有解决您的问题,
我认为,如果你想再次阅读你准备好的列表,应该从 listoflist 中读取 singleList
ListIterator<ArrayList<String>> iter2=listoflists.listIterator();
while(iter2.hasNext())
ListIterator<String> iter1=(ArrayList<String>)iter2.next();
while(iter1.hasNext())
System.out.println(iter1.next());
【讨论】:
以上是关于列表迭代器卡住-Java的主要内容,如果未能解决你的问题,请参考以下文章