2012-03-23 12 views
0
public class Game { 

    public Game(
     boolean createstage, //For sorting purposes 
     int slength, 
     int sheight, 
     boolean createplayer, 
     int plength, 
     int pheight, 
     boolean playersprite, 
     BufferedImage psprite, 
     boolean defaultcontrols, 
     String pcontrols, 
     boolean test 
     ) { 
    if(test == true) { //if test is true, test 
     new Test(); 
    }else{ //otherwise create a stage is createstage is true and 
     if(createstage == true) { 
      StageObj gamestage = new StageObj(slength, sheight); 
     } 
     if(createplayer==true) { 
      PlayerObj player = new PlayerObj(plength, pheight, psprite, pcontrols); 
     } 
    } 
} 

public Game() { 
    new StageObj(100, 100); 
    new PlayerObj(10, 10); 
} 

public StageObj givestageobj() { 
    return gamestage; 
} 

public PlayerObj giveplayerobj() { 
    return player; 
} 

} 

因此,我的構造函數的代碼和兩個變量旨在返回在構造函數中創建的變量。問題是,giveplayerobj和givestageobj這兩個方法都沒有找到變量gamestage和player。這是有道理的,但我如何在構造函數中創建變量,然後以某種方式將它們傳遞給giveplayerobj()和givestageobj()變量,以便理論上可以有人從Game.giveplayerobj()返回構造函數中創建的playerobj?構造函數創建多個變量,如何通過其他方法返回它們?

感謝

-JXP

+0

添加StageObj gamestage = NULL;作爲實例變量,並刪除構造函數中的局部變量創建。如果(createstage == true){gamestage = new StageObj(slength,sheight); } – kosa 2012-03-23 14:04:33

+3

你的命名約定是可怕的,後綴與Obj的一切是一個完整的[重言式](http://www.vertigrated.com/blog/2011/02/interface-and-class-naming-anti-patterns-java-命名-慣例,重言式/)! – 2012-03-23 14:06:22

+0

不管@JarrodRoberson說的是什麼。請使用更好的命名約定。它使代碼可讀和有意義。 – r3st0r3 2012-03-23 14:20:47

回答

1

您需要將它們聲明爲類屬性,而不是在構造函數內部工作。所以,你的代碼應該看起來像下面顯示的那樣。

變化:

  1. 我已經添加了兩個類變量StageObj andPlayerObj,因爲你必須爲他們的getter到位。
  2. 從構造函數中刪除了這兩個變量的聲明。
  3. 爲已分配的默認構造函數添加了賦值。 (也許你正試圖實現與默認的構造函數)

    public class Game { 
    
    private StageObj gamestage = null; 
    private PlayerObj player = null; 
    
    public Game(
        boolean createstage, //For sorting purposes 
        int slength, 
        int sheight, 
        boolean createplayer, 
        int plength, 
        int pheight, 
        boolean playersprite, 
        BufferedImage psprite, 
        boolean defaultcontrols, 
        String pcontrols, 
        boolean test 
        ) { 
    if(test == true) { //if test is true, test 
        new Test(); 
    }else{ //otherwise create a stage is createstage is true and 
        if(createstage == true) { 
         gamestage = new StageObj(slength, sheight); 
        } 
        if(createplayer==true) { 
         player = new PlayerObj(plength, pheight, psprite, pcontrols); 
        } 
    } 
    } 
    
    public Game() { 
        gamestage = new StageObj(100, 100); 
        player = new PlayerObj(10, 10); 
    } 
    
    public StageObj givestageobj() { 
        return gamestage; 
    } 
    
    public PlayerObj giveplayerobj() { 
        return player; 
    } 
    
    } 
    
+0

這是一個好主意。我只是有點困惑,因爲變量不是在構造函數內部創建的,而只是給定一個值......但是我想_exactly_我​​希望是不可能的。謝謝! – JXPheonix 2012-03-24 14:05:20

1

兩個變量gamestageplayer必須實例變量:

public class Game { 
    private StageObj gamestage; 
    private PlayerObj player; 

(...) - and in the constructor : 

     if(createstage == true) { 
      gamestage = new StageObj(slength, sheight); 
     } 
     if(createplayer==true) { 
      player = new PlayerObj(plength, pheight, psprite, pcontrols); 
     } 

(...) 

} 
0

我想你想要的是一個實例變量,即

public class Game { 
    private StageObj gamestage; 
    ... 
    public Game(...) { ... }  

    public StageObj givestageobj() { 
    return gamestage; 
    } 
} 
-1

您需要在co之前設置您的數據字段nstructor做出的getter EN setter方法是這樣的:

public class Game { 

private StageObj gamestage = null; 
private PlayerObj player = null; 

public Game(
    boolean createstage, //For sorting purposes 
    int slength, 
    int sheight, 
    boolean createplayer, 
    int plength, 
    int pheight, 
    boolean playersprite, 
    BufferedImage psprite, 
    boolean defaultcontrols, 
    String pcontrols, 
    boolean test 
    ) { 
if(test == true) { //if test is true, test 
    new Test(); 
}else{ //otherwise create a stage is createstage is true and 
    if(createstage == true) { 
     gamestage = new StageObj(slength, sheight); 
    } 
    if(createplayer==true) { 
     player = new PlayerObj(plength, pheight, psprite, pcontrols); 
    } 
} 
} 

public Game() { 
    gamestage = new StageObj(100, 100); 
    player = new PlayerObj(10, 10); 
} 

public StageObj givestageobj() { 
    return gamestage; 
} 

public PlayerObj giveplayerobj() { 
    return player; 
} 

} 


public Game() { 
new StageObj(100, 100); 
new PlayerObj(10, 10); 
} 

public StageObj givestageobj() { 
return gamestage; 
} 

public PlayerObj giveplayerobj() { 
return player; 
} 

public int getSlenght(){ 
return slenght; 
} 

public void setSlenght(int slenght){ 
this.slenght = slenght; 
} 

} 

等等當然你需要添加其他類,在一個類不能做的一切。您需要播放器和舞臺類;-)另請參見Oracle的Java課程http://docs.oracle.com/javase/tutorial/java/javaOO/

+0

使用該命名約定,我們真的可以決定構造函數中的所有參數是否應該屬於此類的屬性?我認爲這些更好是玩家的屬性,並且遊戲正試圖返回到那裏。不是嗎? – r3st0r3 2012-03-23 14:24:44

+0

是的,當然是!這僅僅是獲得者和制定者的一個例子。他需要製造許多其他的對象類,否則他會把所有的邏輯學都放在一個類中,那是不對的!這只是一個小例子;-) – Gynnad 2012-03-26 14:13:34

+0

我仍然認爲它們是播放器和舞臺類的屬性。這兩個對象是在這裏創建的,那就是構圖。沒關係,還不錯。但是,plength,pheight和pcontrols更適合作爲Player的屬性。舞臺上的舞姿和光芒也是如此。 – r3st0r3 2012-03-26 16:35:10

相關問題