ArrayIndexOutOfBoundsException Выходит только время от времени - PullRequest
0 голосов
/ 10 марта 2019

Я разбиваю строку и спрашиваю разумные ее части.Программа иногда их печатает, но иногда выдает ошибку.

      val = myPort.readStringUntil('\n');
// i'm reading strings of the form X104XY-1244YZ-18716Z
// with variable numbers between the letters coming from
// my sensor, i'm spliting to get the integers with their
// sign, it works but sometimes shows that error
      String[] X-integer = val.split("X");
      String[] Y-integer = val.split("Y");
      String[] Z-integer = val.split("Z");
      print(X-integer[1].trim());
      print(Y-integer[1].trim());
      print(Z-integer[1].trim());

Гир - полный код.Иногда мой датчик выдает «ноль», я пытался:

  • , используя if (val! = Null), чтобы избежать этого, но он все равно не работает;
  • помещая код впервый блок if для устранения нулевой, но той же ошибки;
import processing.serial.*;
import java.awt.Robot;

Serial myPort;
String val;

void setup()
{
  String portName = Serial.list()[1];
  myPort = new Serial(this, portName, 9600);
}

void draw()
{
  if ( myPort.available() > 0)
  {
    val = myPort.readStringUntil('\n');
  }
  // print(parts[2].trim()); // STRING_VALUES
  if (val != "null") {
    String[] Xs = val.split("X");
    String[] Ys = val.split("Y");
    String[] Zs = val.split("Z");
    print(Xs[1].trim());
    print(" ");
    print(Ys[1].trim());
    print(" ");
    print(Zs[1].trim());
    print(" ");
    print(" ");
    print(val);
  }
  delay(15); // was 15
}

1 Ответ

0 голосов
/ 10 марта 2019

Я исправил эту проблему после проверки выходного сигнала моего датчика.После замедления вывода я заметил, что в самом первом выводе, который он выдавал, всегда отсутствовала координата Z, что означает отсутствие третьего разбиения, и поэтому мой код не работал, ваш код не работал для меня, потому что ваш был создан для 3 координат,я исправил это, добавив if (parts.length == 3) {} вокруг моего кода и код стал: (я собираюсь разделить его на отдельную функцию, и это заменит s = 0 / s = 1, которыйэто замена для возврата -1

import processing.serial.*;
import java.awt.Robot;

Serial Port;
String val;
int s=1; //for canceling out nulls and empty values

void setup(){
  String Bluetooth = Serial.list()[1];
  Port = new Serial(this, Bluetooth, 9600);
}

void draw(){
  if ( Port.available() > 0){
    val = Port.readStringUntil('\n');

    if (val == null || val.trim().isEmpty()) { s=0; }

    if(s==1){
      String[] parts = val.split(" ");
      println("");
      print(val);
      print(parts.length);
      print("  ");

      if(parts.length == 3){
        String x = parts[0];
        String y = parts[1];
        String z = parts[2];
        print(x);
        print(" ");
        print(y);
        print(" ");
        print(z); }
    }
    s=1;
    delay(1); // 15
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...