2012-10-20 70 views
1

我有下面的類城市吸氣二傳手的Java,傳遞私有變量

public class City { 

    public static boolean walls[][]; 
    public static int width, height; 
    public static Human people[]; 
    public static ArrayList<Zombie> zombies = new ArrayList<Zombie>(); 

隨機地圖生成(牆用於限定建築,人們的居住在城市,並在城市中創建一個殭屍)。還有人類和類殭屍

public class Human { 
int x; 
int y; 
int d; 

public Human(int x, int y, int d) 
{ 
    this.x = x; 
    this.y = y; 
    this.d = d; 
} 

殭屍和人類都包含決定他們在地圖上移動的邏輯。因此,他們需要訪問城市中的牆壁,人員和殭屍進行導航。程序運行良好,它們是靜態的,但是每當我創建一個新的城市(重置程序)時,它就會凍結,我認爲這是因爲靜態變量。我試着讓它們變成私人的,並在City中創建getter和setter方法,並從人類和殭屍中調用它們,但它總是說我不能以靜態方式調用非靜態方法。 例子是:

public int peopleLength(){ //in City 
    return people.length; 
} 

City.peopleLength() //in Human 

可以讓我知道我做錯了,或給我在正確的方向推?提前致謝。

編輯:

if(StdDraw.isKeyPressed(32)){ 
world = new City(MAX_X,MAX_Y,80, 400); 
} 

當按下空格鍵時,地圖被清除並重新繪製。有時它可以工作2到3次,但大多數情況下它只會進入黑屏而不顯示任何內容。

+0

「它凍結起來」並不完全清楚*究竟發生了什麼。讓變量靜態是一個壞主意(它不會影響你創建多少個'City'的實例),但它不應該使任何東西凍結。 –

+1

我強烈建議從Oracle Java教程開始,以便理解這些語言的基本組件。我可以想到你會在這裏使用'static'字段的原因是零。 –

回答

1

或者:

  • 使變量非靜態和私人,再加入getter和setter方法對他們來說,或
  • 添加靜態方法上重置變量市被稱爲復位()他們的初始狀態

我會走第一條路線。

0

使用new關鍵字創建City的實例。

City gotham = new City(); 

然後,您將能夠在非靜態上下文中引用gotham對象。