Java 创建第二个对象使类的函数不再工作

Java 创建第二个对象使类的函数不再工作,java,class,processing,Java,Class,Processing,我想写一个显示向量的类。如果我创建一个向量对象,一切都会按预期进行。在我的示例代码中,对象lin1是在draw()函数的帮助下绘制的 如果我现在创建第二个矢量对象,(未更改)draw函数不再执行任何操作,即使对象本身未更改。反过来也是一样的:如果第二个对象是唯一存在的对象,那么可以绘制它,但前提是lin1不存在 有人知道我的错误在哪里吗 vector lin; vector lin2; void setup() { size(500,500); background(255); c

我想写一个显示向量的类。如果我创建一个向量对象,一切都会按预期进行。在我的示例代码中,对象
lin1
是在
draw()
函数的帮助下绘制的

如果我现在创建第二个矢量对象,(未更改)draw函数不再执行任何操作,即使对象本身未更改。反过来也是一样的:如果第二个对象是唯一存在的对象,那么可以绘制它,但前提是
lin1
不存在

有人知道我的错误在哪里吗

vector lin;
vector lin2;

void setup()
{
  size(500,500);
  background(255);
  cenX = width/2;
  cenY = height/2;
  noLoop();
}

void draw()
{
  coordSys();
  lin = new vector(0,0,100,100);
  lin2 = new vector(0,0,-200,-200);
  lin.draw();
  lin2.draw();
  lin.getAll();
}

class vector
{
  float x1,y1,x2,y2;
  float length;
  float angle;
  float gegenK, anK;

  vector(float nx1, float ny1, float nx2, float ny2)
  {
    translate(cenX,cenY);
    x1 = nx1; y1 = -ny1; x2 = nx2; y2 = -ny2; 
    strokeWeight(2);
    // Gegenkathete
    gegenK = ny2 - ny1;
    // Ankathete
    anK = x2 - x1;
    // length and angle
    length = sqrt(sq(anK) + sq(gegenK));
    angle = winkel(gegenK, anK);
  }

  void draw()
  {
    stroke(0);
    line(x1,y1,x2,y2);
  }
}
}

编写代码时请使用标准命名约定。具体来说,你的类应该是
Vector
,大写V。另外,请以编译和运行的形式发布你的代码

无论如何,
Vector()
构造函数中的第一个调用是:

translate(cenX,cenY);
这会将窗的原点移动到窗的一半。执行此操作一次后,只需相对于窗口中心进行图形调用。但是,当您执行两次此操作时,它会将原点移动到窗口的右下角,因此所有图形都会移出屏幕边缘


要解决问题,您需要移动这条线,使其只发生一次(可能在
draw()
函数的开头),而不是每次绘制
向量时。另一种方法是使用
pushMatrix()
popMatrix()
函数来避免窗口翻译的堆叠。

编写代码时请使用标准命名约定。具体来说,你的类应该是
Vector
,大写V。另外,请以编译和运行的形式发布你的代码

无论如何,
Vector()
构造函数中的第一个调用是:

translate(cenX,cenY);
这会将窗的原点移动到窗的一半。执行此操作一次后,只需相对于窗口中心进行图形调用。但是,当您执行两次此操作时,它会将原点移动到窗口的右下角,因此所有图形都会移出屏幕边缘


要解决问题,您需要移动这条线,使其只发生一次(可能在
draw()
函数的开头),而不是每次绘制
向量时。另一种方法是使用
pushMatrix()
popMatrix()
函数来避免窗口翻译的堆叠。

是否有不调用
lin2.getAll()
的原因?能否将源代码显示到
stroke()
line()
stroke(0)
做什么?这些是处理内部函数。直线画一条直线,笔划设置直线的颜色。@Ishnark:哦,对不起,getall函数只是打印出向量起点和终点的坐标。在draw()函数中,是否需要将其更改为引用调用的“line”,如:this.line(x1,y1,x2,y2)?否则,它似乎只处理1 line()函数。你为什么不调用
lin2.getAll()
?你能把源代码显示给
stroke()
line()
stroke(0)
做什么?这些是处理内部函数。直线画一条直线,笔划设置直线的颜色。@Ishnark:哦,对不起,getall函数只是打印出向量起点和终点的坐标。在draw()函数中,是否需要将其更改为引用调用的“line”,如:this.line(x1,y1,x2,y2)?否则,它似乎只处理1 line()函数。嗯,吉姆,就是这样!谢谢!就这样!谢谢!