java.lang.ArrayIndexOutOfBoundsException:在发生错误的地方遇到困难

时间:2014-01-19 11:58:22

标签: java excel loops multidimensional-array jxl

我正在尝试编写一个基本的java程序,它从excel电子表格中收集数据并将其存储在数组中。我遇到的问题是我得到了ArrayOutOfBounds异常,但看不到我在数组范围之外的位置。我甚至故意将数组的大小设置为远大于循环终止值:

import java.io.File;
import java.io.IOException;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;





public class InputArray {

    public static void main(String[] args) {
        String[][] InputArray1;
        int i = 0;
        int j = 0;

        InputArray1 = new String[220][220];

        try{
        Workbook OLE1Shots = Workbook.getWorkbook(new File("C:/Book12.xls"));
        Sheet inList = OLE1Shots.getSheet(0);
        for (i = 0; i < 190; i++){
            Cell aCell = inList.getCell(i, 0);
            Cell bCell = inList.getCell(i, 1);
            String strIn = aCell.getContents();
            String strOrd = bCell.getContents();
            if (strIn != ""){
                InputArray1[0][j] = strIn;
                InputArray1[1][j] = strOrd;
                j = j + 1;
            }

        }
        }

        catch (BiffException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        for (i = 0; i < 190; i++){
            System.out.println(InputArray1[0][i]);
            System.out.println(InputArray1[1][i]);
        }
    }


}

我得到的完整信息是:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2

    at jxl.read.biff.SheetImpl.getCell(SheetImpl.java:356)

    at InputArray.main(InputArray.java:29)

如果有人能解决这里出了什么问题,那会很棒。希望结果只是我变得愚蠢。

修改

我做了一些愚蠢的事。抛出错误的原因是我在单元格位置(行,列)使用VBA表示法,其中jxl使用(列,行)。我改变了这些路线:

for (i = 0; i < 190; i++){
    Cell aCell = inList.getCell(i, 0);
    Cell bCell = inList.getCell(i, 1);

到这些:

c = inList.getRows();
    for (i = 0; i < c; i++){

         Cell aCell = inList.getCell(0, i);
         Cell bCell = inList.getCell(1, i);

现在代码运行并正确打印出字符串。但是,我确实收到了消息

InputArray as localhost contains obsolete methods. The virtual machine was unable to remove all stack frames running old code from the call stack...

1 个答案:

答案 0 :(得分:1)

您的变量'i'从0变为189,并被送到从电子表格中读取单元格的方法。电子表格有那么多行吗?请注意,行显示在电子表格程序中的事实并不一定意味着行在电子表格文件中表示。

该消息准确地告诉您,如果不是完全错误的话 - 过大的索引是'2',报告错误的方法是getCell(),并且行号告诉您在哪里你的计划正在发生。