因此,我正在制作一个名为Spots的对象数组,它象征着骰子的不同面孔。
它接受用户输入(在本例中手动设置为3),然后创建Spots并将随机数从1滚到6。
但是,当我在aleady创建的Spots数组上使用Spots方法时,我会得到一个空指针,尽管在这两个循环(创建循环和滚动点循环)中使用相同的变量长度。
我的代码
全局变量
private Spots[] spots;
private int x = 3;构造器
  public Director(JFrame window, String args[]) {
    JMenuBar menus = new JMenuBar();
    window.setJMenuBar(menus);
    menus.add(makeFileMenu());
    window.getContentPane().add(makePanel(), BorderLayout.WEST);
    window.getContentPane().add(makeSpots(x), BorderLayout.CENTER);
    rollAgain();
}rollAgain()方法
public void rollAgain() {
    int v = 1 + (int) (Math.random() * 6);
    for (int i = 0; i < x; i++) {
        spots[i].setValue(v);
    }
}makeSpots()方法
private JComponent makeSpots(int x) {
    JPanel p = new JPanel();
    p.setBorder(BorderFactory.createTitledBorder("Dice"));
    Spots[] spots = new Spots[x];
    for (int i = 0; i < x; i++) {
        spots[i] = new Spots(200, 200);
        spots[i].setBorder(BorderFactory.createEtchedBorder());
        p.add(spots[i]);
    }
    return p;
}发布于 2014-06-04 16:25:55
您正在设置局部变量。
Spots[] spots = new Spots[x];这不会改变字段(该字段恰好具有相同的名称)
private Spots[] spots;最简单的解决方案是没有局部变量。
this.spots = new Spots[x];发布于 2014-06-04 16:25:53
您需要在构造函数中实例化一个新的Spots数组。
this.spots = new Spots[x];发布于 2014-06-04 16:26:01
spots[i].setValue(v);从这一行判断,我的猜测是数组中的Spot对象为null。
错误在您的makeSpots()方法中。您不更新字段x的值,而是使用局部变量。在方法的开头添加this.x = x。
https://stackoverflow.com/questions/24042681
复制相似问题