循环中的Simple ArrayIndexOutOfBoundsException 1

时间:2014-09-25 02:00:18

标签: loops arraylist indexoutofboundsexception

我有一个包含值行的.data文件。我使用split方法将它们分成单独的值,然后初始化ArrayList,我将模型项添加到列表中。这个特定代码我有一个while循环,看起来像这样:

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是否可能无法正确读取行数?我认为不是这样的。我很可能没有正确地宣布一些事情。

1 个答案:

答案 0 :(得分:0)

所以这恰好解决了我的问题,我真的很累,现在没有兴趣找出原因,但它解决了问题lol:

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修复了它。