2014-09-25 61 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修复它。