2013-03-30 5 views
0

Я получаю исключения нулевого указателя в строкемассив Исключение нулевого указателя

if(names[j].compareTo(names[j+1]) > 0)

, и я не могу понять, почему. Это может иметь что-то делать с инициализацией, но я действительно не знаю, что это может быть

public static void item3(Profitable[] movies, Scanner input) { 
    int j; 
    boolean flag = true; 
    String temp; 
    String search; 
    int low = 0; 
    int high; 
    int mid; 

    String[] names = new String[6]; 

    for(int i = 0; i < 5; i++) { 
     names[i] = ((Movie)movies[i]).getTitle(); 
    } 

    high = names.length - 1; 
    mid = (low + high)/2; 

    while(flag) 
    { 
     flag = false; 
     for(j = 0; j < names.length - 1; j++) 
     { 

      if(names[j].compareTo(names[j+1]) > 0) { 
       temp = names[j]; 
       names[j] = names[j+1]; 
       names[j+1] = temp; 
       flag = true; 
      } 
     } 
    } 

    System.out.print("Enter your search term: "); 
    search = input.nextLine(); 

} 

ответ

4

Этот цикл:

for(int i = 0; i < 5; i++) { 
    names[i] = ((Movie)movies[i]).getTitle(); 
} 

инициализирует только первые пять элементов, но последняя не инициализируется.

0
for(int i = 0; i < 5; i++) { // only 5 iterations while names contain 6 elements 
    names[i] = ((Movie)movies[i]).getTitle(); 
} 

Это всегда лучше использовать i < names.length вместо явного целого числа.

for(int i = 0; i < names.length; i++) 
0

Вы также можете использовать i <= 5, но всегда лучше использовать поле длины.