2016-02-19 54 views
0

我已經將幾個隨機繪製的線的座標存儲在對象數組中。 我現在想能夠以編程方式處理數組中所有對象的x1。我無法弄清楚如何做到這一點,甚至不知道如何查看存儲行的座標。如果我做println()我只是得到對象的內存引用。如何訪問作爲數組中對象存儲的形狀的座標

這裏是到目前爲止的代碼:

class Line{ 
    public float x1, y1, x2, y2; 

    public Line(float x1, float y1, float x2, float y2){ 
     this.x1 = x1; 
     this.y1 = y1; 
     this.x2 = x2; 
     this.y2 = y2; 
    } 

    public void draw(){ 
     line(x1, y1, x2, y2); 
     float rot = random(360); 
     rotate(rot); 
    } 

    //public boolean intersects(Line other){ 
    // //left as exercise for reader 
    //} 
} 

ArrayList<Line> lines = new ArrayList<Line>(); 

void setup(){ 
    background(204); 
    size(600, 600); 

    for(int i = 0; i < 20; i++){ 
     float r = random(500); 
     float s = random(500); 
     lines.add(new Line(r,s,r+10,s+10)); 


printArray(lines); 
for(Line line : lines){ 
     line.draw(); 

    } 
} 
} 

回答

1

只需用點號。用你的線類,你可以創建一個使用new關鍵字和構造函數(即具有相同的名稱作爲類的特殊功能)的Line對象(或實例):

Line aLine = new Lines(0,100,200,300); 

一旦你有一個實例,你可以訪問它的使用實例名稱變量(稱爲屬性),那麼.符號,然後在變量名:

println("aLine's x1 is " + aLine.x1); 

在你的示例代碼,在draw()功能您訪問.draw()函數(稱爲方法)的每個Line實例:

for(Line line : lines){ 
     line.draw(); 

    } 
} 

這只是一個使用同樣的理念,接入線路的其他成員的之事:

for(Line line : lines){ 
     //wiggle first point's x coordinate a little (read/write x1 property) 
     line.x1 = random(line.x1 - 3,line.x1 + 3); 
     line.draw(); 

    } 
} 

請務必仔細閱讀Daniel Shiffman's Objects tutorial瞭解更多詳情。

相關問題