Как объявить и назначить массив без сбоев приложения? - PullRequest
0 голосов
/ 01 февраля 2012

По сути, я реализую приложение reversi для Android для своей курсовой работы 13-го года, и этот фрагмент кода предназначен для настройки доски, которая показана здесь как массив позиции класса. Однако при запуске приложение вылетает.

Position[][] board = new Position[7][7]; //declaring the board//

for(int n = 0; n < 8; n ++){

        ...


    for(int i = 0; i < 8; i++ ){
        final ImageView button = new ImageView(this);

        final int countN = n;
        final int countI = i;

        board[countI][countN].isPositionEmpty = true; //assigning a value//

Любая помощь будет высоко ценится! заранее спасибо!

Ответы [ 4 ]

5 голосов
/ 01 февраля 2012

Вы выделили только массив 7x7, но вы пытаетесь использовать его как массив 8x8.

Изменить на использование:

Position[][] board = new Position[8][8];

Или предпочтительно иметь константу, которая используется в нескольких местах:

private static final int BOARD_SIZE = 8;

...
Position[][] board = new Position[BOARD_SIZE][BOARD_SIZESIZE];

for (int i = 0; i < BOARD_SIZE; i++)
{
    ...
}

Распределение массива так:

Foo[] array = new Foo[size];

создает массив с size элементами; допустимые индексы находятся в диапазоне от 0 до size - 1 включительно.

4 голосов
/ 01 февраля 2012

Вы должны также уничтожить каждый индекс вашей матрицы.

for(int i = 0; i < 8; i++ ){
        board[countI][countN] = new Position();
        board[countI][countN].isPositionEmpty = true; //assigning a value//
}
2 голосов
/ 01 февраля 2012
// Bad:
Position[][] board = new Position[7][7];
for(int i = 0; i < 8; i++ ){
  ...

// Better:
Position[][] board = new Position[8][8];
for(int i = 0; i < 8; i++ ){
  ...

// Best:
Position[][] board = new Position[8][8];
for(int i = 0; i < board[0].length; i++ ){
  ...

PS:

Вам нужно не только инициализировать массив (выделить место для каждой строки и каждого столбца вашего "контейнера");Вам * также * нужно инициализировать каждый элемент массива (например, "array [i] [j] = new Position ()").

1 голос
/ 01 февраля 2012

Ваш цикл for идет от 0 до 7, что на самом деле 8 ячеек.Итак, вам нужно 8 позиционных объектов.

Position[][] board = new Position[8][8]

или если вы хотите, чтобы это была доска 7 на 7, вам нужно остановиться на шестом указателе

for (int i =0; i <7 ; i++)
...