我的循环怎么了?

时间:2014-11-16 13:58:58

标签: java loops

我目前正在尝试读取文件并相应地存储它们。我已经从文本文件中读取并将它们存储到arraylist中,现在我只是想存储framnumbers,但是当我打印出arrayList的内容时,我仍然得到相同的framenumber。

我的文本文件的内容

FrameNumber: 49136
FrameNumber: 49137
FrameNumber: 49138
FrameNumber: 49139
FrameNumber: 49140
FrameNumber: 49141
288
200
3848
287
191
3859
283
145
3849

我的readfile函数

public void readFile() 
{
    ArrayList<Frame> frameList = new ArrayList<Frame>();
    ArrayList<Joint> jointList = new ArrayList<Joint>();
    ArrayList<String> al = new ArrayList<String>();
    Frame retrievedFrame = new Frame();
    Joint tempJoint = new Joint();
    Coordinate tempCoordinate = new Coordinate();

    try
    {
        File file = new File(filename);
        if(!file.exists())
        {
            file.createNewFile();
        }

        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));
        BOMSkipper.skip(bufferedReader);
        String line = bufferedReader.readLine();            

        while (line != null)
        {
            al.add(line);
            line = bufferedReader.readLine();
        }

        bufferedReader.close();        
    }          
    catch (IOException e)
    {

        e.printStackTrace();
    }

    String temp;

    for (int i = 0; i < al.size(); i++)
    {
        if (al.get(i).contains("FrameNumber:") == true)
        {
            temp = al.get(i).replace("FrameNumber: ", "");
            temp = temp.trim();                    
            retrievedFrame.setFrameNumber(Integer.parseInt(temp));
            frameList.add(retrievedFrame);
            System.out.println("Frame Detected");
        }
        else
        {
            System.out.println("Not Frame");
        }
    }

    for (int j = 0; j < frameList.size(); j++)
    {
        System.out.println(frameList.size());
        System.out.println("Frame Number: " + frameList.get(j).getFrameNumber());            
    }       
}

1 个答案:

答案 0 :(得分:2)

您只创建一个Frame。您使用Frame创建Frame retrievedFrame = new Frame();,然后为每一行更改该帧的帧编号并再次将其添加到列表中。

您可能想要的是每次都创建一个新的Frame

if (al.get(i).contains("FrameNumber:")) {
    temp = al.get(i).replace("FrameNumber: ", "");
    temp = temp.trim();                    
    Frame retrievedFrame = new Frame();
    retrievedFrame.setFrameNumber(Integer.parseInt(temp));
    frameList.add(retrievedFrame);
    System.out.println("Frame Detected");
}