我正在尝试将文件的每一行存储到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
答案 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