android中的2D数组

时间:2011-04-11 21:07:46

标签: android arrays 2d

我正在尝试使用eclips IDE在Android中运行此代码。


int maxrow=0;

int label=10;

int[][] relations=new int[500][200];

make2dzero(relations,500,200); //initialized every element with 0.

relations[maxrow][0]=label;

最后一行,即relations[maxrow][0]=label;正在抛出一个超出绑定异常的数组。如果我使用relations[0][0]=label;,那么代码运行正常。 有没有人知道这段代码有什么问题?感谢。

3 个答案:

答案 0 :(得分:2)

是。在您调用maxrow

时,relations[maxrow][0] = label;大于或等于500

检查你增加maxrow的位置,并确保它不超过或等于你的限制,500。

答案 1 :(得分:1)

如果relations[maxrow][0]=label;失败,但relations[0][0]=label;有效,那么maxrow不是0.尝试打印出maxrow的值并查看它是什么。

我的猜测是你已经剪掉了一段代码,它可以重置maxrow的值,或者在初始化方法中意外设置了它。

对于记录,您不需要将值初始化为0.默认情况下,它们已设置为0。如果要将它们初始化为非零值,则只需要它。

OP的高级初始化程序:

/**
 * Initialize a 2d int array to any single value
 * The array does not need to be rectangular.
 * Null rows in the 2d array are skipped (code exists to initialize them to empty.)
 * @param arr the array to modify to contain all single values
 * @param value the value to set to all elements of arr
 */
static void initializeArray(final int[][] arr, final int value) {
    for(int i = 0; i < arr.length; i++) {
        if(arr[i] == null) continue; // perhaps it wasn't initialized
        /* optional error handling
        if(arr[i] == null) {
            arr[i] = new int[0];
            continue;
        }
        */
        for(int j = 0; j < arr[i].length; j++) arr[i][j] = value;
    }
}

Oceanblue的例子:

// works, arrays as OP is working with
class Oceanblue {
    public static void main(String[] args) {
        int[][] arr = new int[30][50];
        System.out.println(arr[4][6]); // should be 0
    }
}

这一结果:

C:\Documents and Settings\glow\My Documents>javac Oceanblue.java

C:\Documents and Settings\glow\My Documents>java Oceanblue
0

这不起作用:

// doesn't work for local variables that aren't arrays
class Oceanblue {
    public static void main(String[] args) {
        int test;
        test++; // bombs
        System.out.println(test); // should be 1, but line above bombed
    }
}

结果,正如您所提到的

C:\Documents and Settings\glow\My Documents>javac Oceanblue.java
Oceanblue.java:4: variable test might not have been initialized
        test++; // bombs
        ^
1 error

答案 2 :(得分:0)

某事,某处显然正在更新 maxrow 。尝试在代码中搜索 maxrow