如何从不同的类生成2个数字时停止获取相同的数字

sam*_*sam 1 java random methods class

当我运行这段代码我得到2号(这是好的),但所产生的号码是相同的(这是坏的),我不想要的号码是相同的.我已经做了这个作为我将要制作的RPG的实验,所以我认为如果每个武器都有不同的类别会更好.

主要课程:

package battlesimMK2;
public class Main {

    public static void main(String Arg[]) {
        String WeponEquiped = "BasicAxe";
        System.out.print(BasicAxe.Str);
        System.out.print(BasicAxe.Str);
    }
}
Run Code Online (Sandbox Code Playgroud)

基本的斧头类:

package battlesimMK2;
import java.util.Random;

public class BasicAxe {
    static Random rnd = new Random();
    static int Str = rnd.nextInt(4)+5;
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 8

这一行:

static int Str = rnd.nextInt(4)+5;
Run Code Online (Sandbox Code Playgroud)

声明一个静态变量并初始化一次.如果您希望代码运行每个访问Str,您应该使它成为一个方法:

public static int getStrength() {
    return rnd.nextInt(4)+5;
}
Run Code Online (Sandbox Code Playgroud)

然后使用以下代码调用它Main.main:

System.out.print(BasicAxe.getStrength());
System.out.print(BasicAxe.getStrength());
Run Code Online (Sandbox Code Playgroud)

可能更加面向对象的替代方法是使强度成为实例字段,以便创建的每个ax具有可能不同(但持久)的强度:

public class BasicAxe {
    private static final Random rnd = new Random();

    private final int strength;

    public BasicAxe() {
        strength = rnd.nextInt(4)+5;
    }

    public int getStrength() {
        return strength;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在Main.main:

BasicAxe axe1 = new BasicAxe();
BasicAxe axe2 = new BasicAxe();
System.out.println(axe1.getStrength());
System.out.println(axe2.getStrength());
System.out.println(axe1.getStrength());
Run Code Online (Sandbox Code Playgroud)

这里,第一和第三行输出将是相同的 - 但第二行(可能)是不同的.