线程“main”java.lang.NullPointerException中的异常?这是什么意思?

时间:2013-02-27 15:38:25

标签: arrays methods runtime-error is-empty

尝试运行此程序时出错。这不是整个程序,而是我认为问题所在的几个细节。错误指出

if(board[randSpace].isEmpty())  and 
cl.makeChutes(5);"

错误是:

"Exception in thread "main" java.lang.NullPointerException
at ChutesAndLadders.makeChutes(ChutesAndLadders.java:29)
at ChutesAndLadders.main(ChutesAndLadders.java:67)"

这是我的计划:

import java.util.Random;
public class ChutesAndLadders{

Cell [] board = new Cell [100];
Random rand = new Random ();
public int chutes, ladders;

public void makeChutes (int a ){
    int makeChutes = a;
    for (int i = 0; i < a; i++){
        int randSpace = rand.nextInt(99);
        if(board[randSpace].isEmpty())
            board[randSpace] = new Cell (-10,"C");
        else 
            i--;
    }
}

 public static void main(String[] args) {
 // Create an instance of ChutesAndLadders
 ChutesAndLadders cl = new ChutesAndLadders(10,10);

 // Randomly place 5 more chutes and 5 more ladders
 cl.makeChutes(5);
 cl.makeLadders(5);

这是我的isEmpty:         public boolean isEmpty(){         for(int i = 0; i&lt; board.length; i ++)         {             if(board [i] .isEmpty())                 返回true;         }         返回false;     }

我的编码可能完全错了。我还在学习,请耐心等待。谢谢!

2 个答案:

答案 0 :(得分:1)

此行出现问题:

if(board[randSpace].isEmpty())

所以假设randSpace中的obect已经存在,如果没有你创建对象(Cell)。但是尚未创建对象,如果为null isEmpty(),您可以如何询问它。先检查一下null

答案 1 :(得分:1)

根据Dewfy的说法,board是一组Cell个对象。这意味着它是Cell个对象的占位符 - 一堆null等待被Cell替换。

如果说,位置1的对象(board[1])尚未分配Cell对象(即您没有发出像board[1]=new Cell()这样的命令)那么board[1]null。因此,如果你问board[1].isEmpty(),你会得到NullPointerException,因为你试图在null对象上调用方法。

现在,您的错误很可能来自board[randSpace] null。所以,问题是:它是否包含Cell对象?您是否使用Cell个对象初始化了数组?

检查这个的一种方法是说: if (board[randSpace]==null || board[randSpace].isEmpty()) .....