我创建了一个公共类UnsortedArray
,它在创建实例时创建了一个int[]
数组(随机整数)作为其中一个变量。每当我想要一个未排序的数组来练习不同的排序技术时,我就会使用这个类实例。
问题是它在运行时显示为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
。没有编译错误或警告,但运行时异常。
帮帮我.. !!
答案 0 :(得分:1)
更改
int[] unsortedArray = new int[size];
到
unsortedArray = new int[size];
您正在重新创建本地unsortedArray
数组,而不是初始化您之前创建的实例变量
答案 1 :(得分:1)
你在UnsortedArray类中有一个实例变量,它永远不会被初始化。您正在将值添加到构造函数完成后死亡的方法的本地数组。那就是为什么你得到空指针。
从
更改您的代码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 UnsortedArray
{
int[] unsortedArray;
public UnsortedArray(int size)
{
unsortedArray = new int[size];
for (int i = 0; i < 10; i++)
{
unsortedArray[i] = (int) (Math.random() * 100);
}
}
答案 2 :(得分:0)
这是你的问题:
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);
}
}
使这项工作只是删除 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);
}
}