当使用另一个类的数组时,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);
}
}