java.lang.Exception : java. lang.ArrayIndexOutOfBoundsException:7

标签 java matrix

我试图将文件的每一行存储到字符串数组中。

/*
*Input file
*2 1 1 1 1 1 1.33 1
*4 2 15 3 9 3 0.185
*/

String[][] data_array = new String[1][7];
int i = 0;
int j = 0;
//file read
StringTokenizer tokenizer =new StringTokenizer(line,delim);
while (tokenizer.hasMoreTokens()) {
    String token = tokenizer.nextToken();
    data_array[i][j] = token;
    j++;
}

但是显示

java.lang.Exception: java.lang.ArrayIndexOutOfBoundsException: 7

但是当我尝试使用时

String[][] data_array = new String[1][8];

我没有得到这个异常,而是得到下面的输出。

2 1 1 1 1 1 1.33 1 null
4 2 15 3 9 3 0.185 null

最佳答案

在 java 中,数组是从 0 开始的,即第一个元素的索引为 0,最后一个元素的索引为 n - 1(其中 n 是数组的长度)。

当您的数组被声明为[1][7]时,最后一个索引将为数字6。第一行包含 8 个值,因此您最终尝试将第 8 个值(索引 7)加载到包含 7 个元素的数组中。使用索引 7 会导致 IndexOutOfBoundException

此外,在您的特定情况下,输入的第一行包含 8 个元素,但第二行仅包含 7 个元素。如果您尝试将 7 个值加载到包含 8 个元素的数组中,则最后一个将为 null。对于您指定的输入,数组声明为长度为 8,输出将为:

2   1   1   1   1   1   1.33    1
4   2   15  3   9   3   0.185   null

(请注意,我添加了额外的空格以更好地指示数组的填充方式。)

此外,声明第一个维度为 1 的二维数组没有什么意义 - 这与声明一维数组相同。您可能想要做的是拥有一个数组,其第一维引用文件中的行,第二维引用行中的值。

关于java.lang.Exception : java. lang.ArrayIndexOutOfBoundsException:7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22451446/

相关文章:

r - 创建指标变量矩阵

c++ - 在 CUDA 内核中使用许多固定大小的矩阵

performance - 多列的matlab矩阵索引

matrix - Fortran 90 中矩阵的最大大小避免段错误

Haskell 线性代数?

java - 如何解析这个2009-05-12T13 :40:00Z to java date

java - Libgdx - 使一个实体部分免受物理影响

java - 有没有办法在没有选择器的情况下在 JMS 中实现多对多关系?

java - 无法连接 Microsoft Azure Vm 中的端口

java - Servlet 输出到 JSP