[英]Java Array of objects' values
import java.awt.*;
import hsa.Console;
public class Game{
static Console c;
public static void Wait (int time){
try{
Thread.sleep (time);
}
catch (InterruptedException e){
}
}
public static class Tile{
public int x,y,stack;
public Tile(){
x = 0;
y = 0;
stack = 0;
}
public Tile(int xco, int yco, int stacknum){
x = xco;
y = yco;
stack = stacknum;
}
public void draw(Tile tile){ //To draw the tile
if(stack>0){
c.setColor(Color.red);
c.fillRect(x*78+1+x,y*78+1+y,78,78); //Calculate coordinates
}
else{
c.setColor(Color.blue);
c.fillRect(x*78+1+x,y*78+1+y,78,78);
}
}
}
public static void main (String[] args){
c = new Console ();
for(int i=0;i<640;i+=79) c.drawLine(i,0,i,474);
for(int i=0;i<500;i+=79) c.drawLine(0,i,632,i);
//8x6 tiling
Tile[][] tile = new Tile[8][6];
for(int i=0;i<8;i++){
for(int j=0;j<6;j++){
tile[i][j] = new Tile();
tile[i][j].x = i;
tile[i][j].y = j; //Set x and y coordinates
tile[i][j].stack = 5;
}
}
Tile.draw(tile[0][0]);
}
}
在這里,我有一個使用多維數組的8x6正方形的圖塊。 我認為坐標會對應正確的數字,但是由於某種原因,坐標似乎會復制之前創建的坐標。 有人可以告訴我為什么會這樣,並且應該如何糾正代碼? 順便說一句,我啟動了Java,所以我不完全習慣於面向對象的編程:P
您的坐標被聲明為靜態的:
public static int x,y,stack;
在聲明中具有static
修飾符的字段稱為static
字段或類變量。 它們與class
關聯,而不與任何對象關聯。 該類的每個實例共享一個靜態類變量,該變量位於內存中的一個固定位置。
但是,您應該刪除static
修飾符以使Tile
每個對象具有特定的值
編輯:從下面的注釋中,為了更好地理解,可以使用draw()
函數:
方法1 :如果我們希望draw函數是static
:
public static void draw(Tile tile){ //To draw the tile
if(stack>0){
c.setColor(Color.red);
c.fillRect(tile.x*78+1 + tile.x, tile.y*78+1+tile.y, 78, 78);
//Calculate coordinates
}
else{
c.setColor(Color.blue);
c.fillRect(tile.x*78+1 + tile.x, tile.y*78+1+tile.y, 78, 78);
}
}
您可以通過Tile.draw(tile)
調用此函數; 其中tile
是Tile
的實例
方法2:如果draw(Title tile)
函數不是靜態的:您根本不需要傳遞tile
實例:
public void draw(){ //To draw the tile
if(stack>0){
c.setColor(Color.red);
c.fillRect(tile.x*78+1 + tile.x, tile.y*78+1+tile.y, 78, 78);
//Calculate coordinates
}
else{
c.setColor(Color.blue);
c.fillRect(tile.x*78+1 + tile.x, tile.y*78+1+tile.y, 78, 78);
}
}
然后創建一個實例Tile title = new Title()
並調用title.draw()
您已將x,y,z標記為靜態,因此您的類的所有實例都使用相同的實例,只需刪除static關鍵字
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.