如何创建点、显示它们并将它们存储在某种数组中

How can I create points, display them and store them in some sort of Array

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

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

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

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

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

  1. 你的条件是会越界到数组索引:试试for (int i = 0; i < dataPoints.size(); i++)
  2. 记得清除框架,否则你会一遍又一遍地在相同的点上画画

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

这是经过上述调整的代码:

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 class (它有 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 Naming Convention 以保持代码一致。 (例如:将 dataPoint class 重命名为 DataPoint 并将 Point 实例重命名为 point