我试图将文件的每一行存储到字符串数组中。
/*
*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/