您好,我正在尝试获取随机 ENUM,但它返回 null,有人可以帮助我我的代码出了什么问题吗?我试图独自修复它,但我放弃了。
public class LotteryMachine {
protected enum Sings {
ONE,
TWO,
THREE
}
private static final List<Sings> SINGS_LIST = Collections.unmodifiableList(Arrays.asList(Sings.values()));
private static final int SIZE = SINGS_LIST.size();
private static final Random RANDOM = new Random();
Sings randomSing() {
return SINGS_LIST.get(RANDOM.nextInt(SIZE));
}
}
public class Game {
private LotteryMachine lotteryMachine = new LotteryMachine();
private LotteryMachine.Sings singOne;
private LotteryMachine.Sings singTwo;
private LotteryMachine.Sings singThree;
private void Lottery(){
this.singOne = lotteryMachine.randomSing();
this.singTwo = lotteryMachine.randomSing();
this.singThree = lotteryMachine.randomSing();
}
public void viewLottery(){
System.out.print(singOne + " " + singTwo + " " + singThree);
}
}
最佳答案
你的问题似乎就在这里
private void Lottery(){
this.singOne = lotteryMachine.randomSing();
this.singTwo = lotteryMachine.randomSing();
this.singThree = lotteryMachine.randomSing();
}
这不是一个构造函数;相反,它是一个名为 Lottery()
的私有(private)方法,并且不被 Game
类使用。由于该方法从未被调用,因此所有 singX
字段都未初始化(即 null)。将初始化逻辑从所述方法移动到如下所示的字段声明后,事情应该可以正常工作
private LotteryMachine.Sings singOne = lotteryMachine.randomSing();
private LotteryMachine.Sings singTwo = lotteryMachine.randomSing();
private LotteryMachine.Sings singThree = lotteryMachine.randomSing();
或者也可以声明 Game
类的构造函数,如下所示:
public Game() {
this.singOne = lotteryMachine.randomSing();
this.singTwo = lotteryMachine.randomSing();
this.singThree = lotteryMachine.randomSing();
}
关于java - 随机枚举返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51503842/