2013-11-09 5 views
0

Я работаю с данными датчика акселерометра Android. Я собираюсь определить шаблоны движения пользователя, используя данные датчика. Большая часть работы выполнена. Но проблема заключается в отслеживании значений непрерывных осей и их сохранении в 2D-массиве. В качестве тестового приложения я хочу заполнить массив double[2][3] следующими данными.Как повторно использовать 2D-массив?

[9.594786195244101, 7.118138482942524, 14.240399748761671], 
[9.45045389772222, 7.35019779174396, 13.271781719935262] 

Можно заполнить массив. Но проблема в том, что я хочу повторно заполнить тот же массив для получения следующего набора значений. Вот мой код для этого.

double[][] test; 
static int sampleNumber = 1; 
static int j = 1; 

public void onSensorChanged(SensorEvent event) { 

    if (started) { 
     if(sampleNumber == (j*2)-1) 
     { 
      test = null; 
      test = new double[2][3];     
      j+=1; 
     } 

     test[sampleNumber-1][0] = magAvg; 
     test[sampleNumber-1][1] = magMin; 
     test[sampleNumber-1][2] = magMax; 
     sampleNumber += 1; 
    } 
} 

При выполнении этого кода создается получить ArrayOutOfBoundsException когда sampleNumber = 3. Я хочу создать новый массив или начать заправку тот же массив при sampleNumber = 1,3,5, ...

Как я могу это сделать?

+0

вы хотите использовать тот же тест [2] [3] массив, когда onSensorChanged() вызвали, что вы хотите правильно? –

ответ

0

вы создаете тестовый массив 2 * 3 все равно ... когда sampleNumber = 3 вы хотите, чтобы заполнить массив как это:

test[2][0] = magAvg; 
test[2][1] = magMin; 
test[2][2] = magMax; 

Но вы создаете тестовый массив, используя

new double[2][3] 

тогда тест имеет только 0 и 1 в качестве индексов, а индекс доступа = 2 является исключенным исключением

+0

Ох ... ты спас мне жизнь ... Я провел целый день, чтобы узнать решение. –

0

Вы можете использовать 2-мерный ArrayList вместо 2-мерного массива в своем корпусе.

ArrayList<ArrayList<Integer>>

Смежные вопросы