首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当尝试设置值时出现空指针异常

当尝试设置值时出现空指针异常
EN

Stack Overflow用户
提问于 2014-06-04 16:22:40
回答 5查看 1.6K关注 0票数 0

因此,我正在制作一个名为Spots的对象数组,它象征着骰子的不同面孔。

它接受用户输入(在本例中手动设置为3),然后创建Spots并将随机数从1滚到6。

但是,当我在aleady创建的Spots数组上使用Spots方法时,我会得到一个空指针,尽管在这两个循环(创建循环和滚动点循环)中使用相同的变量长度。

我的代码

全局变量

代码语言:javascript
运行
复制
private Spots[] spots;

private int x = 3;

构造器

代码语言:javascript
运行
复制
  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()方法

代码语言:javascript
运行
复制
public void rollAgain() {
    int v = 1 + (int) (Math.random() * 6);
    for (int i = 0; i < x; i++) {
        spots[i].setValue(v);
    }
}

makeSpots()方法

代码语言:javascript
运行
复制
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;
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-06-04 16:25:55

您正在设置局部变量。

代码语言:javascript
运行
复制
Spots[] spots = new Spots[x];

这不会改变字段(该字段恰好具有相同的名称)

代码语言:javascript
运行
复制
private Spots[] spots;

最简单的解决方案是没有局部变量。

代码语言:javascript
运行
复制
this.spots = new Spots[x];
票数 4
EN

Stack Overflow用户

发布于 2014-06-04 16:25:53

您需要在构造函数中实例化一个新的Spots数组。

代码语言:javascript
运行
复制
this.spots = new Spots[x];
票数 0
EN

Stack Overflow用户

发布于 2014-06-04 16:26:01

代码语言:javascript
运行
复制
spots[i].setValue(v);

从这一行判断,我的猜测是数组中的Spot对象为null。

错误在您的makeSpots()方法中。您不更新字段x的值,而是使用局部变量。在方法的开头添加this.x = x

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24042681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档