1

次のデータを持つファイルがあります

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());
            }
        }

ありがとう

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

iter2.next() を呼び出していないため、無限に反復します。

while(iter2.hasNext()) {
   while(iter1.hasNext()) {
       System.out.println(iter1.next());
   }
   iter2.next();
}
于 2013-05-31T07:23:19.133 に答える
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 に答える