2012-02-15 37 views
0

我敢肯定,我失去了一些東西傻了,這裏是我的代碼:如何從另一種方法訪問我在主方法中實例化的對象?

public class clearBlankGrid { 

    public static void main(String args[]) { 

     Monster myMonster = new Monster(10,10,5,5,1); 
     MonsterGUI myGUI = new MonsterGUI(myMonster); 

     if (myMonster.getRows() > 0) { 
      // 0 = North, 1 = East, 2 = South, 3 = West 
      myMonster.setFacing(3); 
      myMonster.setIcon(); 
     } 

    } 

    public static void keepClearing() { 

     myMonster.isGridCleared(); // Cannot find symbol 'myMonster' 

    } 

} 
+0

我做myMonster靜態成員,深受大家的建議。我不確定我是如何設法忘記的,但感謝大家的幫助!你已經挽救了我的頭髮不被拉出。 :) – slickjer 2012-02-16 00:41:57

+0

最終,雖然你想要得到這個代碼,而不是把它放在適當類的非靜態方法中。主要方法應該儘可能簡單;基本上它設置了程序的對象,然後打開它們然後退後,就是這樣。 – 2012-02-16 02:05:26

回答

3

myMonster如果您想要在keepClearing方法(它是靜態的)中訪問它,則需要成爲一個靜態成員。

注意:作爲參考,您也可以避免通過實際實例化您的clearBlankGrid類來使Monster成員變爲靜態。 Monster然後可以是clearBlankGrid的實例變量,這意味着方法不再必須是靜態的。

public class clearBlankGrid { 

    private Monster myMonster; 
    private MonsterGUI myGUI; 

    public void run() { 
     myMonster = new Monster(10,10,5,5,1); 
     myGUI = new MonsterGUI(myMonster); 

     if (myMonster.getRows() > 0) { 
      // 0 = North, 1 = East, 2 = South, 3 = West 
      myMonster.setFacing(3); 
      myMonster.setIcon(); 
     } 
    } 

    public void keepClearing() { 
     myMonster.isGridCleared(); 
    } 

    public static void main(String args[]) { 
     clearBlankGrid blankGrid = new clearBlankGrid(); 
     blankGrid.run(); 
    } 
} 
+0

就我個人而言,如果類不是Runnable,我不會將主代理方法命名爲「運行」。我傾向於將主要委託方法命名爲「過程」,「執行」或類似的東西。 – 2012-02-16 00:18:32

+0

@MichaelRutherfurd好點。 – Martin 2012-02-16 00:53:45

1

你需要把該對象在靜態字段。

+0

經過一番研究,你似乎已經把我放在了正確的軌道上。我以前曾嘗試將對象放在主體之外,但我將「靜態」位分開。謝謝一堆! – slickjer 2012-02-15 23:53:37

1

myMonster一個static類成員:

public class clearBlankGrid { 

    private static Monster myMonster; 

    public static void main(String args[]) { 

     myMonster = new Monster(10,10,5,5,1); 
     // ... 

    } 
} 
0
public class clearBlankGrid { 

    // I made this static because you access it via a static method. 
    // If you make it a class member, as Greg Hewgill suggested, then 
    // change the method that uses it to be non-static 
    private static Monster myMonster = new Monster(10,10,5,5,1); 


    public static void main(String args[]) { 

     MonsterGUI myGUI = new MonsterGUI(myMonster); 

     if (myMonster.getRows() > 0) { 
      // 0 = North, 1 = East, 2 = South, 3 = West 
      myMonster.setFacing(3); 
      myMonster.setIcon(); 
     } 

    } 

    public static void keepClearing() { 

     myMonster.isGridCleared(); // Cannot find symbol 'myMonster' 

    } 
} 
相關問題