制作非静态整数的静态副本

时间:2014-05-05 13:50:18

标签: java random static

对于我的第一年工程编程课,我必须用Java进行D游戏,只有很少的Java知识。

在一个类中,我通过

生成一个随机整数
public int rbug = (int)(Math.random() * 18);
每隔这么多的滴答声。我必须在另一个类中使用这个整数(在if循环的要求中),显然它需要是静态的。但是当我将变量更改为public int static时,该值不再发生变化。

有没有一种简单的方法可以解决这个问题?


编辑:添加了部分代码:

public int rbug = (int)(Math.random() * 18); 

用于

public void render(Graphics g){
  g.drawImage(bugs.get(rbug), (int)x, (int)y, null);

在另一堂课中:

if(Physics.Collision(this,  game.eb, i, BadBug.rbug)){

}

作为BadBug.rbug的错误,我收到了消息

  

无法对非静态字段进行静态引用

2 个答案:

答案 0 :(得分:0)

每次想要BadBug.rbug时,您想获得一个新号码吗?然后将其从变量转换为方法。

答案 1 :(得分:0)

使用静态来使事物更容易访问并不是一个非常好的设计理想。你想让变量有一个“getter”来从另一个类的实例访问它们,甚至可能是“setter”。一个例子:

public class Test {

    String sample = 1337;

    public Test(int value) {
        this.sample = value;
    }

    public Test(){}

    public int getSample() {
        return this.sample;
    }

    public void setSample(int setter) {
        this.sample = setter;
    }

}

如何使用它们的一个例子:

Test example = new Test();
System.out.println(example.getSample()); // Prints: 1337
example = new Test(-1);
System.out.println(example.getSample()); // Prints: -1
example.setSample(12345);
System.out.println(example.getSample()); // Prints: 12345

现在你可能会想“如何从类中获取一个字符串,在类中创建实例变量?”。这也很简单,当你构造一个类时,你可以将类实例本身的值传递给类的构造函数:

public class Project {

    private TestTwo example;

    public void onEnable() {
        this.example = new TestTwo(this);
        this.example.printFromProject();
    }

    public int getSample() {
        return 1337;
    }
}

public class TestTwo {

    private final Project project;

    public TestTwo(Project project) {
        this.project = project;
    }

    public void printFromProject() {
        System.out.println(this.project.getSample());
    }

}

这允许您通过传递主类实例来保留类的单个实例。

要回答有关“静态访问器”的问题,也可以这样做:

public class Test {

    public static int someGlobal = /* default value */;

}

允许通过Test.someGlobal设置和获取值。但请注意,我仍然会说这是一种可怕的做法。