如何将更新的全局类变量从一个方法传递到另一个方法?

时间:2017-12-05 01:16:45

标签: java variables methods

我在一个方法中更新了一个变量(在类中是全局的),然后我似乎无法将该更新的变量传递给另一个方法。 任何帮助将不胜感激,谢谢。 这是我缩短的代码:

public class Game{

    private int randomIndexX;

    protected String spawn(){
        randomIndexX = randomGenerator.nextInt(10);
        return null;
    }

    protected String test(){
        System.out.println(this.randomIndexX);
        return null;
    }
}


public class Player extends Game{
    protected String getNextAction(String command) {
        switch(command){
            case "test":
                test();
                break;
        }
    }
}


public static void main(String[] args) {
    Game game = new Game();
    Player player = new Player();

    game.spawn();
    player.getInputFromConsole();
}

编辑:所以当我从Player类调用test()时,我希望它打印出randomIndexX,但是在方法test()中,即使使用this.randomIndexX,它似乎仍然不起作用

2 个答案:

答案 0 :(得分:0)

我能看到的第一个问题是你没有构造函数。(可选)  (如果你不做一个,那么编译器会生成所谓的"默认"构造函数,它是一个没有任何参数的构造函数。通常很好的做法是显式创建一个类构造函数。

我能看到的第二个问题是你错过了结束括号。 修复如下所示。

public class Game

{

private int randomIndexX;

protected String spawn()
{
    randomIndexX = 0;
    return null;
}

protected String test()
{
    System.out.println(randomIndexX);
    return null;
}

<强>}

您可以构建它并触发您想要的任何方法:

Game game = new Game();
game.spawn();
game.test()

答案 1 :(得分:0)

  

编辑:所以当我从Player类调用test()时,我希望它打印出randomIndexX,但是在方法test()中,即使使用this.randomIndexX,它似乎仍然没有工作。

所以test()是实例方法,这意味着你必须创建一个Class Game实例才能调用该方法,randomIndexX是实例成员所以你需要好好想想你想做什么,如下randomIndexX对于Game类的所有对象都很常见,你应该将它声明为静态,如:

private static in randomIndexX;

因为它的值不会因对象实例而改变。

因此,为了从类外部访问该变量,因为它是私有的,你声明一个公共方法来检索该值(getter或者也称为访问器):

public static int getRandomIndex(){
    return randomIndexX;
}

因此,在main中,你甚至不必创建Game类的实例来访问randomIndexX中保存的值,你只需要调用getter方法:

System.out.println(Game.getRandomIndex());

上面的行将0打印到控制台,因为0是int类型成员的默认值,现在如果你想能够改变它,你只需在Game类中创建一个setter或mutator方法:

public static void setRandomIndex(int n){
   randomIndexX = n;
}

你去了,你现在可以从Game类的外部设置和检索“randomIndexX”字段。

例如,下面的代码会将randomIndexX的值设置为5,然后在控制台中将其打印出来:

Game.setRandomIndex(5);
System.out.println(Game.getRandomIndex());