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です。publicbooleanisEmpty(){for(int i = 0; i <board.length; i ++){if(board [i] .isEmpty())return true; }falseを返します。}

コーディングが完全に間違っている可能性があります。私はまだ学んでいるので、しばらくお待ちください。ありがとうございました!

4

2 に答える 2

1

この行に問題が発生します:

if(board[randSpace].isEmpty())

したがって、オブジェクト(Cell)を作成しない場合は、randSpaceのオブジェクトがすでに存在していると想定されます。ただし、オブジェクトはまだ作成されていません。nullかどうかを確認する方法を教えてくださいisEmpty()。最初にnullと照合するだけです

于 2013-02-27T15:46:08.687 に答える
1

Dewfyが言ったことに続いて、ボードはCellオブジェクトの配列です。Cellこれは、オブジェクトのプレースホルダーであることを意味します。つまり、。nullに置き換えられるのを待っている一連のsCellです。

たとえば、位置1(board[1])のオブジェクトにオブジェクトが割り当てられていないCell場合(つまり、そのようなコマンドを発行していない場合board[1]=new Cell())、board[1]nullです。したがって、オブジェクトのメソッドを呼び出そうとしているので、尋ねるboard[1].isEmpty()と、が得られます。NullPointerExceptionnull

さて、あなたのエラーはであることに起因する可能性がありboard[randSpace]ますnull。だから、問題は:それはCellオブジェクトを含んでいますか?配列をCellオブジェクトで初期化しましたか?

これを確認する1つの方法は、次のように言うことです if (board[randSpace]==null || board[randSpace].isEmpty())

于 2013-03-06T04:48:14.597 に答える