0

Java でコンウェイのライフ ゲームを作成しようとしていますが、レンガの壁にぶつかったようです。「Cell」というクラスを作成しました。これは、セルが生きているか死んでいるかを本質的に決定するブール変数と、必要に応じてセルを殺すか作成するメソッドを保持します。メイン メソッドでは、ユーザーがゲームで必要とする行と列の数を取得し、それぞれ「場所」という名前の Cell オブジェクトの配列を作成しようとしています。コードを実行して各セルの初期値を出力しようとすると、null ポインター例外エラーが発生し、修正方法がわかりません。私の知る限り、各配列に null 値を設定することはできませんが、これは初めてのことです...

//Create a Cell class for the purpose of creating Cell objects.

public class Cell

{


private boolean cellState;

//Cell Constructor. Initializes every cell's state to dead.
public Cell()
{
    cellState = false;
}

//This function kills a cell.
//Should be called using objectName[x][y].killCell.
public void killCell()
{
    cellState = false;
}

//This function creates a cell.
//Should be called using objectName[x][y]createCell.
public void createCell()
{
    cellState = true;
}

public void printCell()
{
    if (cellState == true)
            {  
               System.out.print("1");
            }
            else if
            {
               System.out.print("0");
            }

}


//End Class Cell//
}

これは私の Cell クラスです。セルが生きている場合、その場所に 1 が出力されます。死んでいる場合は、その場所に 0 が入ります。

これが私の主な方法です。エラーは、Cell オブジェクトの配列を作成する行で発生しています。私はこれをすべて間違っていますか?

//GAME OF LIFE//


import java.util.Scanner;
import java.lang.*;
public class GameOfLife
{
    public static void main(String[] args)
    {
    Scanner scan = new Scanner(System.in);
    System.out.println("\t\tWelcome to the Game of Life!");
    System.out.println("\n\nDeveloped by Daniel Pikul");

    System.out.print("\n\nHow many rows would you like your game to have?");
    int numRows = scan.nextInt();

    System.out.print("How many columns would you like your game to have?");
    int numColumns = scan.nextInt();

    //Create an array of cell objects.
    Cell[][] location = new Cell[numColumns][numRows];

    //This for loop will print out the cell array to the screen.//
    for (int i = 0; i < numRows; i++)
    {
        for (int j = 0; j < numColumns; j++)
        {
            location[i][j].printCell();
        }
        System.out.print("\n");
    }

    //Prompt the user to enter the coordinates of cells that should live.
    System.out.println("Input coordinates tocreate active cells.");

    int xCo, yCo;
    char userChoice;

    //This do loop takes coordinates from the user. Every valid coordinate
    //creates a living cell in that location.
    do
    {
        System.out.print("Enter an x coordinate and a y coordinate: ");
        xCo = scan.nextInt();
        yCo = scan.nextInt();
        location[xCo][yCo].createCell();
        System.out.print("Enter another coordinate? (Y/N) ");
        String tempString = scan.next();
        userChoice = tempString.charAt(0);
    }while(userChoice == 'Y');

    //THIS IS AS FAR AS I HAVE GOTTEN IN THE PROGRAM THUS FAR//
}

}
4

3 に答える 3

3
//This for loop will print out the cell array to the screen.//
for (int i = 0; i < numRows; i++)
{
    for (int j = 0; j < numColumns; j++)
    {
        location[i][j].printCell();  // location[i][j] not instantiated
    }
    System.out.print("\n");
}

上記の for ループでは: - 配列で Cell オブジェクトをインスタンス化していません: -

location[i][j].printCell();

このコードの前に、次のことを行う必要があります: -

location[i][j] = new Cell();
于 2012-10-16T21:26:06.230 に答える
1
public void printCell()
{
    if (cellState == true)
            {  
               System.out.print("1");
            }
            else if
            {
               System.out.print("0");
            }

}

に:

public void printCell()
{
    System.out.print( cellState ? "1" : "0" );
}

そこにあれば余分なものがあります。

私たちはあなたのためにそれをデバッグするためにあなたのエラーログを真剣に必要とします、私たち全員に賛成してくださいそしてそのエラーログを貼り付けてください。

于 2012-10-16T21:34:18.177 に答える
0

java.lang.RuntimeException: Uncompilable source code これにより、おそらく実行時例外が発生します。

java.lang.RuntimeException: Uncompilable source code」のようなもの

   public void printCell()
   {
        if (cellState == true){
                 System.out.print("1");
        }
        else /*if*/
        {
           System.out.print("0");
        }

   }

私はそれをコメントしました。今すぐコードを試して実行してください。または、 else if (cellState==false)で何らかの条件を指定します。これは、ブール値が true または false のいずれかを持つことができるため、この場合は意味がありませんが、それでもうまくいくように指定したい...動作するには、特定の条件を提供する必要があります..

于 2012-10-17T12:54:14.377 に答える