我正在尝试使用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;
,那么代码运行正常。
有没有人知道这段代码有什么问题?感谢。
答案 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)