0

ある作業に取り組んでいましたが、それを実行しようとすると、IDE がフリーズし、タスク マネージャーを使用して閉じる必要がありました。

理由はありますか?私が使用していたイテレータと while ループに関係があることはわかっています。

誰でもそれを見つけることができますか?サーブレット コードの下の部分:

try {
        List<FileItem> fields = upload.parseRequest(request);

        Iterator<FileItem> it = fields.iterator();




        //starting conversion from file to sample


        //creating a container to hold the samples
        ArrayList<sample> samplelist = new ArrayList();

        while (it.hasNext()) {

            sample c = new sample();
            FileItem fileItem = it.next();

            c.setFileName(fileItem.getName());
            c.setPayload(fileItem.getString());
            samplelist.add(c);
        }

        //looping through uploaded samples to split code into lines
        for (int i = 0; i < samplelist.size(); i++) {
            sample current = new sample();
            current = samplelist.get(i);

            //splitting whole code block into lines based on ;
            String[] temp;
            temp = current.getPayload().split(";");

            //going through split lines and adding them to the sample's rawcode
            //arraylist after checking for for loops
            for (int j = 0; j < temp.length; j++) {

                // current.Raw_Code.add(temp[j]);
                String current_line = temp[j];




                current.Raw_Code.add(current_line);

            }




        }

//testing
        System.out.print("starting testing");
        for (int i = 0; i < samplelist.size(); i++) {
            sample current = new sample();
            current = samplelist.get(i);
            System.out.print("File name <br/>");
            current.getFileName();
            System.out.print("lines detected <br/>");

            Iterator itr = current.Raw_Code.iterator();

           //this while loop started to cause the problem

             while(itr.hasNext()){
             System.out.print("x");   
             }
        }




    } catch (FileUploadException e) {
        e.printStackTrace();
    }



    out.close();
    return;
4

3 に答える 3

10

ここに:

while(itr.hasNext()){
    System.out.print("x");   
}

呼び出していないitr.next()ため、イテレータは反復していません。:)ループitr.next()内に追加すると、問題が修正されます。while

于 2013-01-15T16:55:31.920 に答える
1

あなたのwhileは無限ループです-イテレータは決して反復しないので、イテレータは常にhasNextを持っています...それでそれはただ進み続けます。

別の注意点として、IDEがクラッシュするときはいつでも、「無限ループはそのプログラミング問題の一般的な副作用であるため」と考える必要があります。

于 2013-01-15T16:57:37.320 に答える
-1

その場所に itr.next() がありません

于 2013-01-15T16:56:10.240 に答える