簡體   English   中英

對象值的Java數組

[英]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)調用此函數; 其中tileTile的實例

方法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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM