Java数组NullPointerException,这段代码有什么问题?

Java数组NullPointerException,这段代码有什么问题?,java,arrays,nullpointerexception,Java,Arrays,Nullpointerexception,我试图通过扫描输入通过构造函数初始化数组,但无法解决我遇到的问题。这是我的密码: public class Array { int [] arr; int length = arr.length; public Array(int input) { this.arr = new int [input]; } } class ArrayTest { public static void main (String []

我试图通过扫描输入通过构造函数初始化数组,但无法解决我遇到的问题。这是我的密码:

public class Array {

    int [] arr;
    int length = arr.length;
    
    public Array(int input) {
        this.arr = new int [input];
    
    }
}

class ArrayTest {

    public static void main (String [] args) {
    System.out.println("Type array size");
    Scanner scan = new Scanner(System.in);
    int input = scan.nextInt();

    Array one = new Array(input);
    
    System.out.println(one.length);
    
    }

}


我没有得到任何编译器错误,但是得到了一个运行时错误,涉及到长度行和对象实例化行。我知道长度变量工作正常,因为我对它进行了A/B测试。但很明显,扫描仪输入并没有将数值指定给数组大小。这段代码有什么问题,我该如何解决?

您正在将null的长度赋给一个变量,这肯定会导致错误。您可以在构造函数中执行此操作

public class Array {

    int [] arr;
    int length;
    
    public Array(int input) {
        this.arr = new int [input];
        this.length = input;
    
    }
}

class ArrayTest {

    public static void main (String [] args) {
        System.out.println("Type array size");
        Scanner scan = new Scanner(System.in);
        int input = scan.nextInt();

        Array one = new Array(input);
    
        System.out.println(one.length);
    }

}

长度的值是在初始化时(在构造函数之前)设置的,这就是为什么会出现空指针异常


您有两个选项,可以创建一个返回数组长度的方法(按arr.length),也可以在构造函数中设置长度值。

这一行,
int length=arr.length在构造函数之前执行。这不起作用,我将它移到了构造函数之后。这没有任何区别。您需要将
length=arr.length
移到构造函数中,然后移到
arr=…
下面。语句在哪里并不重要。我强烈建议将其完全删除,因为您无法获取尚未初始化的数组的长度。它会导致错误“输入的原始类型int没有字段长度”@MikeB Hi Mike请立即检查。这很有效,谢谢。
public class Array {

    int [] arr;
    int length;
    
    public Array(int input) {
        this.arr = new int [input];
        this.length = input;
    
    }
}

class ArrayTest {

    public static void main (String [] args) {
        System.out.println("Type array size");
        Scanner scan = new Scanner(System.in);
        int input = scan.nextInt();

        Array one = new Array(input);
    
        System.out.println(one.length);
    }

}