Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我不知道这是如何返回nullPointerError的_Java_Multidimensional Array - Fatal编程技术网

Java 我不知道这是如何返回nullPointerError的

Java 我不知道这是如何返回nullPointerError的,java,multidimensional-array,Java,Multidimensional Array,我正在这里使用这个类,并试图对其调用.get方法。这看起来很简单,但无论我做什么更改,我都会得到一个nullPointerException: value = gameBoard[row-1][column-1]; 看起来它可能是一个off by one错误,但我几乎可以肯定数组的大小是正确的,并且调用它的主方法中的.get方法以一行1和一列1开始,所以我看不出有什么问题 public class Simple2DArray implements Simple2DInterface { pub

我正在这里使用这个类,并试图对其调用.get方法。这看起来很简单,但无论我做什么更改,我都会得到一个nullPointerException:

value = gameBoard[row-1][column-1];
看起来它可能是一个off by one错误,但我几乎可以肯定数组的大小是正确的,并且调用它的主方法中的.get方法以一行1和一列1开始,所以我看不出有什么问题

public class Simple2DArray implements Simple2DInterface
{
public int[][] gameBoard;

public Simple2DArray(int aRow, int aColumn)
{

    int[][] gameBoard = new int[aRow][aColumn];
    for(int i=0;i<aRow;i++)
    {           
        for(int j=0;j<aColumn;j++)
        {           
            gameBoard[i][j] = -1;
        }
    }
}

public int getNumberOfRows()
{
    int rows;

    rows = gameBoard.length;

    return rows;
}

public int getNumberOfColumns()
{
    int columns;

    columns = gameBoard[0].length;

    return columns;     
}

public void clear()
{
    for(int i=0;i<gameBoard.length;i++)
    {
        for(int j=0;j<gameBoard[i].length;i++)
        {
            gameBoard[i][j] = -1;
        }
    }       
}

public void setToOne(int row, int column)
{
    gameBoard[row+1][column+1] = 1;
}

public void setToZero(int row, int column)
{
    gameBoard[row+1][column+1] = 0;
}

public void flip(int row, int column)
{
    if(gameBoard[row-1][column-1]==1)
    {
        gameBoard[row-1][column-1]=0;
    }
    if(gameBoard[row-1][column-1]==0)
    {
        gameBoard[row-1][column-1]=1;
    }
}

public int get(int row, int column)
{       
    int value;

    value = gameBoard[row-1][column-1];

    return value;
}
}

编写时,您正在构造函数中声明一个新变量

int[][] gameBoard = new int[aRow][aColumn];
删除声明int[]],它将引用实例变量:

gameBoard = new int[aRow][aColumn];

此外,clear方法中的内部循环必须有j++。

它可能不相关,但为什么SetToOne/SetToZero方法使用行+1和列+1?它们实际上应该是行-1和列-1。这是因为它被用于一个游戏板,它从1,1开始,而阵列显然从0,0开始。谢谢!我知道这一定很简单,只是没意识到我不能申报两次