2013-06-13 2 views
2

Вот код (в том числе обоих классов):Java Array - NullPointerException

import java.util.Scanner; 
import java.util.Random; 
public class SortedArray 
{ 
    public int [] myNums; 
    public int sizeOfArray; 
    private int userInput; 
    public Sort sortedArray; 
    public Scanner input = new Scanner(System.in); 
    public void sortedArray() 
    { 
     System.out.println("Enter the number of values to put in the array:"); 
     int userInput = input.nextInt(); 
     myNums = new int [userInput]; 
     sizeOfArray = userInput; 
     for(int i=0;i<userInput;i++) 
     { 
      Random randomNum = new Random(); 
      myNums[i] = randomNum.nextInt(100)+1; 
     } 
     for(int i=0;i<userInput;i++) 
     { 
      System.out.println(myNums[i]); 
     } 
     sortedArray = new Sort(myNums, sizeOfArray); 
     sortedArray.publicdisplay(); 
    } 
} 

******************************************************************************* 

public class Sort 
{ 
    public int[] array; 
    public int sizeOfArray; 

    public Sort(int[] oldArray, int sizeOfOldArray) 
    { 
     sizeOfArray = sizeOfOldArray; 
     for(int i = 0; i < sizeOfArray; i++) { 
      array[i] = oldArray[i]; 
     } 
     sort(); 
    } 

    public void publicdisplay() 
    { 
     for (int i = 0; i < sizeOfArray; i++){ 
      System.out.println(array[i]); 
     } 
    } 

    private void sort() 
    { 
     for (int i = 0; i < sizeOfArray; i++) 
     { 
      for (int j = 0; j < sizeOfArray; i++) 
      { 
       if (array[j] < array[i]) 
       { 
        swap(i,j); 
       } 
      } 
     } 
    } 

    private void swap(int x, int y) 
    { 
     int temp = 100; 
     temp = array[x]; 
     array[x] = array[y]; 
     array[y] = temp; 
    } 
} 

Программа компилируется правильно, но когда я запускаю программу и введите число значений поместить в массив, я получаю следующая ошибка:

java.lang.NullPointerException 
at Sort.<init>(Sort.java:17) 
at SortedArray.sortedArray(SortedArray.java:32) 

Он генерирует массив, но не сортирует его. Буду признателен за любую помощь, спасибо.

+0

Кстати, ваша функция сортировки() не будет работать. Вероятно, вы можете исправить это, изменив значение 'for (int j = 0; j

+0

Возможный дубликат [NullPointerException, возникающий при доступе к элементу массива] (http://stackoverflow.com/questions/8145728/nullpointerexception-being-thrown-whenever-array-member-is-accessed) –

ответ

2

В вашем Sort классе, вы объявили переменную экземпляра, который является массивом, называемый array, но не инициализируется, поэтому он все еще null при попытке доступа к нему в конструкторе на этой линии:

array[i] = oldArray[i]; 

Сначала необходимо создать свой массив.

+1

Хотя эффективность, побочный эффект этого подхода состоит в том, что массив, пройденный в, будет отсортирован. Модификация переданного массива может быть нежелательным. – Bohemian

5

Необходимо инициализировать массив. Добавьте строку в конструкторе:

public Sort(int[] oldArray, int sizeOfOldArray) 
{ 
    sizeOfArray = sizeOfOldArray; 
    array = new int[sizeOfOldArray]; // <-- Added this line 
    for(int i = 0; i < sizeOfArray; i++) { 
     array[i] = oldArray[i]; 
} 

или даже лучше, используйте метод Arrays.copyOfRange() утилиту, чтобы сделать работу для вас:

public Sort(int[] oldArray, int sizeOfOldArray) 
{ 
    sizeOfArray = sizeOfOldArray; 
    array = Arrays.copyOfRange(oldArray, 0, sizeOfOldArray); 
}