不知道为什么我在填充这个2d数组时会得到索引超出范围的异常

时间:2015-01-26 18:08:54

标签: java arrays

        while (scanner.hasNextLine()) {
            line = scanner.nextLine();
            if (line.charAt(0) != '#') {
                c++;
                // looking to get dimensions from file.
                // getting size of array from lines of input.
                dimensions = new int[c][4];

                // Split my file input into an array of tokens(strings)
                tokens = line.split(",");

                for (int i = 0; i < tokens.length; i++) {
                    // Parse strings to int.
                    dimtoke[i] = Integer.parseInt(tokens[i]);
                }

                int n = 0;
                for (int k = 0; k < dimensions.length; k++) {
                    for (int j = 0; j < dimensions[0].length; j++) {
                        // Error here when trying to put dimtoke into dimensions
                        (ERROR HERE)dimensions[k][j] = dimtoke[n];

                        n++;
                    }
                }
            }

填充维数组的for循环正确运行两次,但在第三次迭代中,我得到一个ArrayIndexOutOfBounds:4异常,我无法解释原因。 2d数组的大小是正确的,我需要计数器n,以便我可以通过dimtoke数组,它应该每次通过while循环重置自己。 (这都包含在try / catch块中,但无法在此视图中添加“尝试”格式化问题。)

这是堆栈跟踪。

java.lang.ArrayIndexOutOfBoundsException: 4
    at P1.readLineSegments(P1.java:49)
    at P1.main(P1.java:16)

2 个答案:

答案 0 :(得分:1)

你有错误的地方n ++。

int n = 0;
for (int k = 0; k < dimensions.length; k++) {
    for (int j = 0; j < dimensions[0].length; j++) {
        // Error here when trying to put dimtoke into dimensions
        (ERROR HERE)dimensions[k][j] = dimtoke[n];
    }
    n++; //it should be here
}

如果你有n ++,如果它是一个4x4阵列,那么它将增加16。

答案 1 :(得分:0)

可以是dimensions[k][j]dimtoke[n]k是维度的长度,所以它是不可能的。 j为0..3(如果它与代码一样简单。所以dimensions[0].length可以替换为4.)

唯一的问题是使用dimtoke[n]并且您的令牌的大小似乎小于4 * dimensions.length