列表迭代器卡住-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&lt;String&gt; 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的主要内容,如果未能解决你的问题,请参考以下文章

Java:迭代器和数组列表之间的区别

java 341.展平嵌套列表迭代器(#)。java

java 341.展平嵌套列表迭代器(#)。java

java 341.展平嵌套列表迭代器(#)。java

java 341.展平嵌套列表迭代器(#)。java

java 341.展平嵌套列表迭代器(#)。java