2D-массив в android

Я пытаюсь запустить этот код в android, используя eclips IDE.


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; То код работает нормально. Кто-нибудь знает, что не так с этим кодом? Благодарю.

Да. maxrow больше или равно 500 в точке, в которой вы называете relations[maxrow][0] = label;

Проверьте, где вы увеличиваете maxrow и убедитесь, что она не превышает или равна вашему пределу, 500.

Если relations[maxrow][0]=label; Fail, но 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 

Что-то, где-то, очевидно, обновляется maxrow . Попробуйте выполнить поиск в maxrow в своем коде.