2014-09-25 31 views
0

我有一個.data文件包含值的行。我使用split方法將它們分成不同的值,然後初始化一個ArrayList,我將模型項添加到列表中。我對這裏這個特定的代碼,而環路是這樣的:簡單的ArrayIndexOutOfBoundsException循環中的1

while (inFile.hasNextLine() { 
    // Do something 
} 

似乎並沒有工作,所以我把它切換到for循環。

public MachineLearningInstance(File f) { 


    try { 

     int noOfRowsInData = 0; 

     LineNumberReader lnr = new LineNumberReader(new FileReader(f)); 
     try { 
      lnr.skip(Long.MAX_VALUE); 
      noOfRowsInData = lnr.getLineNumber(); 
      //System.out.println(noOfRowsInData); 
      lnr.close(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     irisData = new ArrayList<Iris>(); 

     // While there is another line in inFile. 
     Scanner inFile = new Scanner(f); 

     for (int i = 0; i < noOfRowsInData; i++) { 

      if (inFile.hasNextLine()) { 
       // Store line into String 
       String line = inFile.nextLine(); 

       // Partition values into separate elements in array 
       String[] numbers = line.split(comma); 

       // Grab values from that line and store it into a Iris ArrayList Item 
       irisData.add(i, new Iris(i, numbers[0], numbers[1], numbers[2], numbers[3], numbers[4])); 

      } 
     } 


    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

出於某種奇怪的原因(我敢打賭,這是一個很簡單的原因,我看不出它)我不斷收到ArrayListIndexOutOfBoundsException 1當我運行這段代碼。我猜我的while循環不斷循環?我不明白這個問題似乎是什麼。

是否有可能我的LineNumberReader沒有正確讀取行數?儘管如此,我認爲情況並非如此。我很可能沒有正確地聲明一些東西。

回答

0

所以這正好解決我的問題,我真的累了,現在有沒有興趣在找出爲什麼,但它解決了這一問題笑:

for (int i = 0; i < noOfRowsInData - 1; i++) { 

      if (inFile.hasNextLine()) { 
       // Store line into String 
       String line = inFile.nextLine(); 

       // Partition values into separate elements in array 
       String[] numbers = line.split(comma); 

       // Grab values from that line and store it into a Iris ArrayList Item 
       irisData.add(i, new Iris(i, numbers[0], numbers[1], numbers[2], numbers[3], numbers[4])); 

      } 
     } 

據說noOfRowsInData - 1修復它。