2014-10-08 2 views
-2

Я работаю над проектом Java и по какой-то причине не могу понять, почему мой код не проходит мимо для цикла.Java Stuck in For Loop

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 является ArrayList с большим количеством объектов (засыпи). Около 200 элементов.

Имеет ли Java ограничение на количество объектов, которые может содержать ArrayList?

Код скомпилирован и выполнен успешно без предупреждений или ошибок. Поэтому я понятия не имею, что здесь происходит.

Любая помощь будет принята с благодарностью.

Заранее спасибо.

Ахмад

EDIT:

Спасибо за быстрый ответ всем. Ниже приведен текущий класс. Единственная другая часть проекта - чтение файла по очереди и вызов метода () ниже.

Метод 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()); 
    } 

} 
+1

Дайте нам код, который мы можем выполнить сами, и который демонстрирует проблему, с которой вы сталкиваетесь. Чаще всего, вы сами решите проблему, правильно разобрав все. –

+0

Что печатает? – ControlAltDel

+0

Что это такое? – Compass

ответ

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

this.currentline вычисляется каждый раз вокруг петли. Если (как побочный эффект) текущие изменения, цикл никогда не может завершиться.

+0

Без дополнительной информации, это просто слепо угадать по возможным причинам. –

+0

это называется «отладка» - начните с того, чтобы представить способ для наблюдаемого поведения. – ddyer

+0

Только что обновил мое сообщение, пожалуйста, просмотрите код. ** this.currentLine ** не обновляется до нижней части родительской функции for loop –