Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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-NullPointerException在初始化数组之后和使用类方法测试数组时_Java_Arrays_Methods_Nullpointerexception - Fatal编程技术网

Java-NullPointerException在初始化数组之后和使用类方法测试数组时

Java-NullPointerException在初始化数组之后和使用类方法测试数组时,java,arrays,methods,nullpointerexception,Java,Arrays,Methods,Nullpointerexception,我一直在尝试初始化一个数组,然后用类方法测试它的值。我已经初始化了数组,并且已经在构造函数中成功地测试了它,所以看起来数组已经被填充,但是当我尝试在Main方法中测试它时,它就会抛出一个NullPointer异常 class PercolGrid { int sides; boolean[] grid; public PercolGrid (int inSides) { sides = inSides; //grid = new bool

我一直在尝试初始化一个数组,然后用类方法测试它的值。我已经初始化了数组,并且已经在构造函数中成功地测试了它,所以看起来数组已经被填充,但是当我尝试在Main方法中测试它时,它就会抛出一个NullPointer异常

class PercolGrid {
    int sides;
    boolean[] grid;

    public PercolGrid (int inSides) {
        sides = inSides;
        //grid = new boolean[] {false,false,false,false,false,
        //false,false,false,false,false};
        boolean[] grid = new boolean[sides];
        for (int i = 0; i < sides; i++) {
            grid[i] = false;
            System.out.println("Setting " + i + " to " + grid[i]);
        }
        System.out.println("Checking outside FOR loop, first square is: " + grid[0]);
    }


    public boolean testSqr (int i) {
        System.out.println("Requested index is: " + i);
        return grid[i];
    }

    public static void main(String[] args){
        PercolGrid firstGrid = new PercolGrid(10);
        System.out.println("Grid created! Checking index ....");
        System.out.println("First square is :" + firstGrid.testSqr(0)); // NullPointerException
        System.out.println("First square is :" + firstGrid.grid[0]); // and here
    }
}
在这里,您可以创建一个新的
布尔
数组网格,它隐藏了类字段

只是

您将参考网格类字段

在这里,您可以创建一个新的
布尔
数组网格,它隐藏了类字段

只是


您将参考网格类字段。

您的问题在于这一行:

boolean[] grid = new boolean[sides];
这是初始化局部变量网格,而不是实例中的字段

将其更改为:

grid = new boolean[sides];
这将初始化实例中的字段


将类型放在前面就是在声明一个新变量。在方法中定义变量时,其范围仅限于该方法。由于局部变量的名称与实例变量的名称相同,因此它“隐藏”了实例变量。

您的问题在于这一行:

boolean[] grid = new boolean[sides];
这是初始化局部变量网格,而不是实例中的字段

将其更改为:

grid = new boolean[sides];
这将初始化实例中的字段


将类型放在前面就是在声明一个新变量。在方法中定义变量时,其范围仅限于该方法。由于局部变量的名称与实例变量的名称相同,因此它“隐藏”了实例变量。

在构造函数中初始化数组
布尔[]
。数组仅在构造函数中可见。如果要使用类的数组,请替换

boolean[] grid = new boolean[sides];


。然后使用类的数组,而不是构造函数的数组。

在构造函数中初始化数组
布尔[]
。数组仅在构造函数中可见。如果要使用类的数组,请替换

boolean[] grid = new boolean[sides];


。然后使用类的数组,而不是构造函数的数组。

在构造函数中,您创建了一个与类成员
网格
同名的本地数组,该数组正被本地
网格
数组隐藏,这就是由于类成员从未初始化而出现空指针异常的原因

简单更改:

 boolean[] grid = new boolean[sides]


这将确保您可以访问所需的类成员。

在构造函数中,您创建了一个与类成员
网格
同名的本地数组,该数组正被本地
网格
数组隐藏,这就是由于类成员从未初始化而出现空指针异常的原因

简单更改:

 boolean[] grid = new boolean[sides]


这将确保您访问所需的类成员。

因此,当我在前面声明类型时,这是在告诉编译器我要创建一个新变量?@AliumBritt Yes。将类型放在前面就是在声明一个新变量。在方法中定义变量时,其范围仅限于该方法。由于您的局部变量与实例变量的名称相同,因此它“隐藏”了实例变量。谢谢你的解释@AliumBritt很乐意帮忙:)所以当我在前面陈述类型时,这是在告诉编译器我想创建一个新变量?@AliumBritt是的。将类型放在前面就是在声明一个新变量。在方法中定义变量时,其范围仅限于该方法。由于您的局部变量与实例变量的名称相同,因此它“隐藏”了实例变量。谢谢你的解释@AliumBritt很乐意帮忙:)
 grid = new boolean[sides]