ArrayIndexOutOfBoundsException иногда, в других случаях код работает отлично? - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь протестировать аудио-визуализатор Arduino, но когда я запускаю визуализатор Java 9 раз из 10, я получаю ArrayIndexOutOfBoundsException, а в других случаях он работает отлично.ArrayIndexOutOfBoundsException: число изменяется каждый раз между 0 и 32.

Я рассматривал включение второго оператора catch для ArrayIndexOutOfBoundsException, но мне казалось, что наложить повязку на более серьезную проблему.

void draw()
{
  String tempC = myPort.readStringUntil('\n');
  if (tempC != null)
  {  
  String[] items = tempC.replaceAll("\\[", "").replaceAll("\\]", 
"").replaceAll("\\s", "").split(",");

  int[] data = new int[32];

  for (int i = 0; i < 32; i++)
      {
        try {
            data[i] = Integer.parseInt(items[i]);
             } 
        catch (NumberFormatException nfe) {};
       }
    background(123);
  rect (20,300,10,-(data[0]));
  rect (40,300,10,-(data[1]));
  rect (60,300,10,-(data[2]));

ЭтоКод должен принимать строку (которая всегда будет содержать 32 числа) из последовательного порта, который выглядит следующим образом: 160,0,0,0,0,0,0,10,0,10,0,10,0,0, 0,0,0,0,0,0,0,0,10,10,0,0,0,0,0,0,10,10 и превратить эту строку в массив, называемый данными размера 32 (data[32]) где каждый элемент в массиве - это одно из чисел, разделенных знаком «,».Затем код создаст прямоугольники высотой, равной величине данных.Когда я запускаю этот код, я получаю сообщение об ошибке ArrayIndexOutOfBoundsException: и затем некоторое число в пределах 0 - 32. Любая помощь очень ценится.

1 Ответ

0 голосов
/ 03 июня 2019

Ваш массив item не всегда имеет 32 значения, поэтому иногда он выдает ошибку, а иногда нет. Лучший способ - инициализировать data до точной длины items, а затем выполнить цикл на основе количества элементов в массиве items.

int[] data = new int[items.length];

for (int i = 0; i < items.length ; i++){
   try {
       data[i] = Integer.parseInt(items[i]);
   } 
   catch (NumberFormatException nfe) {};
}
...