ArrayIndexOutOfBoundsException仅偶尔出现

时间:2019-03-10 09:58:33

标签: java split processing sensor

我正在分割一个字符串,并要求它的合理部分。该程序有时会打印出来,但有时会打印出错误。

      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());

Gere是完整的代码。有时我的传感器输出“空”,我尝试过:

  • 使用if(val!= null)避免出现这种情况,但仍然无法正常工作;
  • 在第一个if块中放入代码以消除null但相同的错误;
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 :(得分:0)

在检查传感器的输出后,我已解决此问题。 放慢输出速度后,我说它提供的第一个输出始终缺少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
  }
}
相关问题