Getter Setter Java,传递私有变量

时间:2012-10-20 19:26:06

标签: java getter-setter

我有以下课程城市

public class City {

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

创建随机地图(墙用于定义建筑物,人在城市中填充,在城市中创建一个僵尸)。还有类人类和类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;
}

Zombie和Human都包含决定他们在地图上移动的逻辑。因此,他们需要访问城市中的墙壁,人员和僵尸才能导航。该程序运行良好,它们是静态的,但无论何时我创建一个新的城市(重置程序),它冻结,我认为这是因为静态变量。我尝试将它们设为私有,并在City中创建getter和setter方法并从Human和Zombie中调用它们,但它总是说我不能以静态方式调用非静态方法。 例如:

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次,但大部分时间它只会进入黑屏并且不会显示任何内容。

2 个答案:

答案 0 :(得分:1)

或者:

  • 使变量非静态和私有,然后为它们添加getter和setter方法,或
  • 在City上添加一个名为reset()的静态方法,将变量重置为初始状态

我会走第一条路。

答案 1 :(得分:0)

使用new关键字创建City实例。

City gotham = new City();

然后,您将能够在非静态上下文中引用gotham对象。