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

时间:2014-03-17 10:06:11

标签: java matrix

我正在尝试将文件的每一行存储到String数组中。

/*
*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

3 个答案:

答案 0 :(得分:1)

在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的二维数组没有意义 - 它与声明单维数组相同。你可能想要做的是有一个数组,第一个维度引用文件中的行,第二个维度引用行中的值。

答案 1 :(得分:0)

长度 i 的数组元素编号为 0 i-1

我假设您使用空格作为分隔符。在行尾有空格吗?这可以解释为什么你得到一个剩余令牌。

答案 2 :(得分:0)

你必须在你的方法中使用数组而不是你班级的主体!

和数组第一个元素有index => 0和最新元素有index => N-1