【问题标题】:java.lang.ArrayIndexOutOfBoundsException: Having difficulty working out where error occursjava.lang.ArrayIndexOutOfBoundsException:难以确定发生错误的位置
【发布时间】:2014-01-19 11:58:21
【问题描述】:

我正在尝试编写一个基本的 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...

【问题讨论】:

  • 我认为调试你的代码会有所帮助...
  • 在“for”循环之前检查列表的大小。不要试图超越这一点。
  • 工作表范围是 24 x 2 单元格的数据,所以我尝试将循环限制降低到 i

标签: java excel loops multidimensional-array jxl


【解决方案1】:

您的变量“i”从 0 变为 189,并被馈送到从电子表格中读取单元格的方法。电子表格有那么多行吗?请注意,电子表格程序中出现的行并不一定意味着电子表格文件中代表了这些行。

该消息准确地告诉您(如果不是完全的话)出了什么问题——索引太大是'2',报告错误的方法是getCell(),行号告诉你程序的位置它正在发生。

【讨论】:

  • 一定要“接受”回答你问题的答案(点赞也不错);它是 stackoverflow 工作方式的一部分......
  • 嗨 rcook。赞成票是我的,因为我发现你给我的提示很有用。我总是尝试勾选回答完整问题的帖子。但是,我会将您的帖子归类为有用的提示或线索,而不是完整的答案,这就是为什么我没有勾选它,但我很感激您的帮助,它确实帮助我找到了答案。
  • 不是超出了行数吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 2012-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
相关资源
最近更新 更多