java - 随机枚举返回 null

标签 java random enums

您好,我正在尝试获取随机 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/

相关文章:

c# - 使用标志枚举来获取权限有哪些缺点?

java - 是否可以从 JTextField 读取各种不同的语言?

java - 如何计算在 Java 中完成一个函数所需的时间?

c - 生成具有几何分布的数字的最快方法

css - 随机背景图片CSS | rails

java - 如何管理多个冗长的字符串常量?

java - include指令和<jsp :include> attribute name problem

java - 如何在创建 bean 后立即在 gradle 项目中使用 @Configuration 执行 Java 主类

c++ - 快速,快速随机整数生成器

c# - 优雅地解析 C# 枚举