Конструктор создает несколько переменных, как их вернуть через другие методы? - PullRequest
0 голосов
/ 23 марта 2012
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 и givetageobj не находят переменные gametage и player. Это имеет смысл, но как мне создать переменные в конструкторе и затем каким-то образом передать их в переменные giveplayerobj () и givetageobj (), чтобы кто-то теоретически мог запустить Game.giveplayerobj (), который возвращает playerobj, созданный в конструкторе?

Спасибо

-JXP

Ответы [ 4 ]

1 голос
/ 23 марта 2012

Вам нужно объявить их как атрибуты класса, а не внутри конструктора, чтобы это работало.Итак, ваш код должен выглядеть так, как показано ниже.

Изменения:

  1. Я добавил две переменные класса StageObj иPlayerObj, потому что у вас для них есть геттеры.
  2. Удалено объявление этих двух переменных внутри конструктора.
  3. Добавлено присваивание в конструктор по умолчанию для overidden.(Возможно, что вы пытались достичь с помощью конструктора по умолчанию)

    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;
    }
    
    }
    
1 голос
/ 23 марта 2012

Обе переменные gamestage и player должны быть переменными экземпляра:

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 голосов
/ 23 марта 2012

Вам нужно установить свои поля данных перед конструктором и создать методы 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;
}

}

И так далее, конечно, вам нужно добавлять другие классы, а не делать все в одном классе.Вам нужен класс Player и Stage ;-) Также взгляните на уроки Java от Oracle http://docs.oracle.com/javase/tutorial/java/javaOO/

0 голосов
/ 23 марта 2012

Я думаю, что вам нужна переменная экземпляра, т.е.

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

  public StageObj givestageobj() {
    return gamestage;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...