2016-05-08 3 views
0

Я пытался использовать метод compareTo() для сортировки массива String, пока пользователь продолжает вводить строки в массив. Но я получаю ошибки: Исключение в потоке «главный» java.lang.NullPointerException на java.lang.String.compareTo (Unknown Source)Сортировка строк с помощью compareTo()

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    int numsDVD =0; //eSize 
    String [] DVD = new String [128]; 
    int [] Length = new int[128]; 
    String choice = ""; 
    do 
    { 
     if(choice.equalsIgnoreCase("a")&&numsDVD<=DVD.length-1) 
     { 
      numsDVD=addDVD(DVD, Length, numsDVD, input); 
     } 
    }while(!(choice.equalsIgnoreCase("Q"))); 
    input.close(); 
} 

public static void sortedinsert(String[] titles, int[] lengths, int numDVDs, String DVD, int length) 
{ 
    System.out.println("Index to compare : " + (numDVDs-1)); 
    if(DVD.compareTo(titles[numDVDs-1])>=0) 
    { 
     titles[numDVDs]=DVD; 
    } 
    else if(DVD.compareTo(titles[numDVDs-1])<0) 
    { 
     for(int i=0; i<numDVDs-1; ++i) 
     { 
      int search = numDVDs-i; 
      String tmpString = ""; 
      int tmplength = 0; 
      if(DVD.compareTo(titles[search])>0) 
      { 
       for(int j=numDVDs; j>numDVDs-1; --j) 
       { 
        tmpString=titles[j-1]; 
        tmplength=lengths[j-1]; 
        titles[j]=tmpString; 
        lengths[j]=tmplength; 
       } 
       break; 
      } 
     } 
     for (int i =0; i<numDVDs; ++i) 
     { 
      System.out.println(titles[i]); 
     } 
    } 
} 
// add to titles and lengths arrays at index numDVDs 

// return numDVDs + 1 
public static int addDVD(String[] titles, int[] lengths, int numDVDs, Scanner stdIn) 
{ 
    if(numDVDs==0) 
    { 
     titles[numDVDs]=getvalidatedinfo(stdIn, "Please enter DVD Title : ", ""); 
     lengths[numDVDs]=getvalidatedinfo(stdIn, "Please enter DVD Length : ", 0); 
    } 
    else 
    { 
     String input = getvalidatedinfo(stdIn, "Please enter DVD Title : ", ""); 
     int length = getvalidatedinfo(stdIn, "Please enter DVD Length: ", 0); 
     sortedinsert(titles, lengths, numDVDs, input, length); 
    } 
    return numDVDs + 1; 
} 

И это ошибки я получаю

Exception in thread "main" java.lang.NullPointerException 
at java.lang.String.compareTo(Unknown Source) 
at Moviecheckeradv.sortedinsert(Moviecheckeradv.java:105) 
at Moviecheckeradv.addDVD(Moviecheckeradv.java:148) 
at Moviecheckeradv.main(Moviecheckeradv.java:21) 

Пожалуйста, помогите мне, спасибо

+0

Где линия 105? –

+0

Это строка 105: if (DVD.compareTo (titles [numDVDs-1])> = 0) Извините за comfusion –

+0

Вы уверены, что ваша переменная 'DVD' не равна нулю? Можете ли вы поделиться кодом метода 'getvalidatedinfo()', пожалуйста? –

ответ

1

Всегда проверяйте введенные данные и убедитесь, что это правильно, и, как и ожидалось. Скорее всего определенно проблема заключается в том, что:

titles[numDVDs-1] 

является null. Таким образом, вы пытаетесь сделать compareTo(null), который дает NPE.

+1

Я собирался опубликовать тот же ответ. Это правильный вариант. См. Также http://stackoverflow.com/questions/7168497/undocumented-string-comparetonull-npe? –

+0

Я установил numDVDs в 0 в начале, хотя ... –

+1

@studyenglish * есть * ваша проблема тогда ... В чем смысл 'titles [-1]'? – Idos