1

我有一个包含以下数据的文件

1 ^ 我讨厌那部手机,它从来没有按我说的去做,响应时间很慢,网络,并且会不断地在我身上崩溃,因为我会在手机上加载太多的应用程序或视频,我认为我在哪里假设是为媒体驱动的人。如果您不介意手机锁定或每隔几天必须将其恢复出厂设置,那就去吧。#

2^ 该设备是第一款真正有很多工作要做的高级设备,漏洞非常少,并且是所有智能手机中最好的浏览器。I phone 3G 和 3Gs 革新了我们今天制造智能手机的方式。#


每行都用“#”分隔,每行用“^”分隔,我将它们存储在 listoflists 中并打印它们。代码(如下所示)正在正确打印 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());
            }
        }

谢谢

4

4 回答 4

4

这段代码是无限循环:

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();
}
于 2013-05-31T07:22:02.177 回答
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());
    }
}
于 2013-05-31T07:23:47.480 回答
0

没有得到你的问题很明显,

我认为,如果您想再次阅读准备好的列表,则应该从 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());
        }
于 2013-05-31T07:32:00.083 回答
0

您没有调用 iter2.next(),因此它会无限迭代。

while(iter2.hasNext()) {
   while(iter1.hasNext()) {
       System.out.println(iter1.next());
   }
   iter2.next();
}
于 2013-05-31T07:23:19.133 回答