1

我想创建点,然后将它们存储在一个数组中。我这样做是为了在之后对我的数据点进行线性回归。所以我需要能够循环浏览我的所有观点。

我在网上找不到类似的东西来处理,因为我真的做不到,我需要你的帮助。这是我的方法,但它似乎不起作用:

ArrayList<dataPoint> dataPoints = new ArrayList<dataPoint>();

void setup(){
  size(1000, 1000); 
  background(255);
}
void draw(){
  for (int i = 1; i == dataPoints.size(); i++) { 
    // An ArrayList doesn't know what it is storing so we have to cast the object coming out
    dataPoint Point = dataPoints.get(i);
    Point.display();

  }  
}

void mousePressed() {
  dataPoints.add(new dataPoint(mouseX, mouseY));
}

class dataPoint {

  float x;
  float y;

  dataPoint(int tempX, int tempY) {
    x = tempX;
    y = tempY;
  }

  void display() {
    strokeWeight(10);
    stroke(255,0,0);
    point(x,y);
  }
} 

我想要一个程序来创建点并将它们存储在一个数组中(或类似的东西,你可以循环通过)。

4

1 回答 1

2

您的大部分代码都是有意义的,我只能发现两个可能会阻止您循环遍历所有要点并将它们可视化的陷阱:

  1. 您的条件是超出范围的数组索引:尝试for (int i = 0; i < dataPoints.size(); i++)
  2. 记得清除框架,否则你会一遍又一遍地在相同的点上绘制

请记住在 Processing/Java 中的数组索引从 0 开始(同样最后一个索引不会是size()数组的索引,而是 1 少,因此<在 for 条件中)

这是您进行上述调整的代码:

ArrayList<dataPoint> dataPoints = new ArrayList<dataPoint>();

void setup(){
  size(1000, 1000); 


}
void draw(){
  background(255);
  for (int i = 0; i < dataPoints.size(); i++) { 
    // An ArrayList doesn't know what it is storing so we have to cast the object coming out
    dataPoint Point = dataPoints.get(i);
    Point.display();

  }  
}

void mousePressed() {
  dataPoints.add(new dataPoint(mouseX, mouseY));
}

class dataPoint {

  float x;
  float y;

  dataPoint(int tempX, int tempY) {
    x = tempX;
    y = tempY;
  }

  void display() {
    strokeWeight(10);
    stroke(255,0,0);
    point(x,y);
  }
} 

请注意,Processing 有一个方便的PVector类(具有 x,y 属性),因此您可以执行以下操作:

ArrayList<PVector> dataPoints = new ArrayList<PVector>();

void setup(){
  size(1000, 1000); 
  strokeWeight(10);
  stroke(255,0,0);
  noFill();
}
void draw(){
  background(255);
  beginShape();
  for (int i = 0; i < dataPoints.size(); i++) { 
    PVector point = dataPoints.get(i);
    vertex(point.x,point.y);
  }  
  endShape();
}

void mousePressed() {
  dataPoints.add(new PVector(mouseX, mouseY));
}

这有点详细,但我建议遵循Java 命名约定以保持代码一致。(例如:将dataPointDataPoint重命名为 并将Point实例重命名为point

于 2019-05-13T17:04:33.527 回答