2D массив в андроид - PullRequest
       5

2D массив в андроид

4 голосов
/ 12 апреля 2011

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

Ответы [ 3 ]

2 голосов
/ 12 апреля 2011

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

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

1 голос
/ 12 апреля 2011

, если 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
0 голосов
/ 12 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...