使用另一个类

时间:2016-07-14 20:28:48

标签: java oop

我创建了一个公共类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。没有编译错误或警告,但运行时异常。

帮帮我.. !!

3 个答案:

答案 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);
    }
 }