Java 创建非静态整数的静态副本

Java 创建非静态整数的静态副本,java,random,static,Java,Random,Static,对于我第一年工程设计的编程课,我必须用Java制作一个D-game,而对Java知之甚少 在一个类中,我通过 public int rbug = (int)(Math.random() * 18); 每隔那么多滴答声。我必须在另一个类中使用这个整数(在if循环的需求中),显然它需要是静态的。但是当我将变量更改为public int static时,该值不再更改 有没有简单的方法来解决这个问题 编辑:添加了部分代码: public int rbug = (int)(Math.random()

对于我第一年工程设计的编程课,我必须用Java制作一个D-game,而对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的错误,我收到了消息

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


是否每次需要BadBug.rbug时都要获得一个新号码?然后将它从一个变量转换为一个方法。

使用static使事情更容易访问对于设计来说不是一个很好的理想。您可能希望让变量有一个“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
设置和获取值。但是请注意,我仍然会说这是一种可怕的做法。

您可以发布生成
rbug
的代码以及使用它的代码,并使您将其声明为
static
?我们需要查看代码,但最有可能的是,“需要是静态的”表示您的设计有问题。您是否混淆了静态术语/您需要的是静态方法而不是静态成员变量?不,BadBug.rbug nedds与BadBug类intsself中使用的相同。那么为什么静态是一个问题呢?(J/K)您需要定义该字段应在何时更改;以及为什么另一个类需要访问该字段。