当使用另一个类的数组时,NullPointerException

问题描述:

我创建了一个公共类UnsortedArray,它在创建实例时创建一个int[]数组(随机整数)作为它的一个变量。每当我想要一个未排序的数组来练习不同的排序技术时,我都会使用这个类实例。当使用另一个类的数组时,NullPointerException

运行时显示为NullPointerException但没有编译错误。

代码:

public class UnsortedArray 
{ 

    int[] unsortedArray; 
    public UnsortedArray(int size) 
    { 
    int[] unsortedArray = new int[size]; 
    for (int i = 0; i < 10; i++) 
    { 
     unsortedArray[i] = (int) (Math.random() * 100); 
    } 
} 

public class QuickSort 

{ 
public static void main(String[] args) 
{ 

    UnsortedArray arr2 = new UnsortedArray(10); 
    //Error:NullpointerException appears here 
    displayArray(arr2.unsortedArray); 
    } 

public static void displayArray(int[] arr) 

{ 

    for (int i = 0; i < arr.length; i++) 
    { 
     System.out.print(arr[i] + " "); 
    } 

} 

当我试图来显示阵列,它显示为NullPointerException。没有编译错误或警告,但运行时异常。

帮我出去.. !!

变化

int[] unsortedArray = new int[size]; 

unsortedArray = new int[size]; 

你正在重建,而不是创建初始化实例变量当地unsortedArray阵列前面

你必须在课堂上UnsortedArray一个实例变量,这是从来没有初始化。您正在向构造函数完成后死亡的方法的本地数组添加值。那是你为什么得到空指针的原因。

公共类UnsortedArray {

int[] unsortedArray; 
    public UnsortedArray(int size) 
    { 
    int[] unsortedArray = new int[size]; 
    for (int i = 0; i < 10; i++) 
    { 
     unsortedArray[i] = (int) (Math.random() * 100); 
    } 
} 

更改代码

public class UnsortedArray 
{ 

    int[] unsortedArray; 
    public UnsortedArray(int size) 
    { 
    unsortedArray = new int[size]; 
    for (int i = 0; i < 10; i++) 
    { 
     unsortedArray[i] = (int) (Math.random() * 100); 
    } 
} 

这里是你的问题:

public UnsortedArray(int size) 
    { 
    int[] unsortedArray = new int[size]; //at this line you create local variable with same name as object variable 
    for (int i = 0; i < 10; i++)   //due to that, array is instantiated locally and after executing constructor is going to be destroyed 
    { 
     unsortedArray[i] = (int) (Math.random() * 100); 
    } 
} 

到麦e这项工作只是删除int []。像这样:

public UnsortedArray(int size) 
    { 
    unsortedArray = new int[size]; //instantiates array for object's variable 
    for (int i = 0; i < 10; i++) 
    { 
     unsortedArray[i] = (int) (Math.random() * 100); 
    } 
}