Java陷入了For循环

时间:2014-10-08 16:38:38

标签: java for-loop

我正在开发一个Java项目,由于某些原因,我无法理解为什么我的代码没有经过 for 循环。

float gain = 0;
float loss = 0;

for(int i = this.currentLine - 14; i < this.currentLine; i ++){
    StockLine pd = (StockLine) this.rows.get(i);
    gain += pd.getGain();
    loss += pd.getLoss();

    System.out.println(i);
}

System.out.println("WHY ISN'T THIS BEING PRINTED");

如果我要移除这三行,它会按预期工作:

StockLine pd = (StockLine) this.rows.get(i);
gain += pd.getGain();
loss += pd.getLoss();

this.rows 是一个包含大量对象(StockLine)的ArrayList。大约200个元素。

Java是否限制了ArrayList可以容纳的对象数量?

代码编译成功,没有任何警告或错误。所以我不知道这里发生了什么。

非常感谢任何协助。

提前谢谢。

艾哈迈德

修改

感谢大家的快速回复。以下是当前的课程。该项目的唯一其他部分是逐行读取文件并调用下面的 file()方法。

方法 getGain() getLoss()只返回一个浮点数。

这是 ReadStock

package nyc.amin;

import java.util.ArrayList;

public class ReadStock implements ReadFileInterface 
{
    private int currentLine = 0;
    private ArrayList rows = new ArrayList();

    @Override
    public void file(String line)
    {
        if(this.currentLine == 0){
            this.currentLine ++;
            return;
        }

        String[] row = line.split(",");
        StockLine currentDay = new StockLine();
        currentDay.setDate(row[0]);
        currentDay.setTime(row[1]);
        currentDay.setOpen(row[2]);
        currentDay.setHigh(row[3]);
        currentDay.setLow(row[4]);
        currentDay.setClose(row[5]);
        currentDay.setVolume(row[6]);


        if(this.currentLine >= 2){
            StockLine previousDay = (StockLine) this.rows.get(this.rows.size() - 1);
            currentDay.setGainOrLoss(currentDay.getClose() - previousDay.getClose());

            if(this.currentLine == 15){
                float gain = 0;
                float loss = 0;

                for(int i = this.currentLine - 14; i < this.currentLine; i ++){
                    StockLine pd = (StockLine) this.rows.get(i);
                    gain += pd.getGain();
                    loss += pd.getLoss();

                    System.out.println(i);
                }

                System.out.println("WHY ISN'T THIS BEING PRINTED");
            }
        }



        this.rows.add(currentDay);
        this.currentLine ++;
    }

    @Override
    public void end()
    {
        //System.out.println("----------------");
        //System.out.println(this.rows.size());
    }

}

2 个答案:

答案 0 :(得分:0)

当循环到达currentLine时,我非常愚蠢,它并不存在于ArrayList中。它不会抛出错误或异常。

这条线只需要改变:

for(int i = this.currentLine - 14; i < this.currentLine; i ++){

for(int i = this.currentLine - 14; i < this.currentLine - 1; i ++){

感谢所有回复的人。

答案 1 :(得分:-1)

每次在循环周围评估this.currentline。如果(副作用) 当前行更改,循环可能永远不会终止。