0

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

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 < board.length; i++) { if (board[i].isEmpty()) return true; } 返回假;}

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

4

2 回答 2

1

此行出现问题:

if(board[randSpace].isEmpty())

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

于 2013-02-27T15:46:08.687 回答
1

按照 Dewfy 的说法,board 是一组Cell对象。这意味着它是Cell对象的占位符——一堆nulls 等待被 a 替换Cell

如果说,位置 1 ( board[1]) 的对象尚未分配Cell对象(即您尚未发出类似命令board[1]=new Cell()或类似的命令),board[1]则为null。因此,如果您要问board[1].isEmpty(),您会得到 a NullPointerException,因为您正在尝试调用null对象上的方法。

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

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

于 2013-03-06T04:48:14.597 回答