2013-02-27 63 views
0

尝试运行此程序时出现错误。这不是整个程序,只是我认为问题出在哪里的几个细节。错误指出线程“main”中的异常java.lang.NullPointerException?这是什么意思?

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: 公共布尔的isEmpty(){ 为(INT I = 0; i < board.length; i ++) if(board [i] .isEmpty()) 返回true; } return false; }

我的编码可能完全错误。我仍然在学习,所以请耐心等待。谢谢!

回答

1

以下是Dewfy说的,板子是一组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()) .....

1

问题似乎与这一行:

if(board[randSpace].isEmpty()) 

所以假定obect在randSpace已经存在,如果不是你创建对象(小区)。但对象还没有创建,如果你可以问它,如果为空isEmpty()。首先检查空值

相关问题