2016-05-08 12 views
0

Ich habe versucht, die compareTo() -Methode zu verwenden, um das String-Array zu sortieren, während der Benutzer weiterhin Strings in ein Array eingibt. Aber ich erhalte immer Fehler: Exception in thread "main" java.lang.NullPointerException bei java.lang.String.compareTo (Unknown Source)Sortierung String mit 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; 
} 

Und das ist der Fehler Ich erhalte

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) 

Bitte helfen Sie mir, Danke

+0

Wo ist Linie 105? –

+0

Das ist die Zeile 105: if (DVD.compareTo (titles [numDVDs-1])> = 0) Sorry für die comfusion –

+0

Sind Sie sicher, dass Ihre 'DVD'-Variable nicht null ist? Können Sie bitte den Code Ihrer 'getvalidatedinfo()' Methode teilen? –

Antwort

1

Sie Ihre Eingabe immer überprüfen und sicherstellen, dass es richtig ist und wie erwartet. Wahrscheinlich auf jeden Fall das Problem ist, dass:

titles[numDVDs-1] 

null ist. Also versuchst du compareTo(null) das gibt die NPE.

+1

Ich wollte die gleiche Antwort posten. Das ist der richtige. Siehe http://stackoverflow.com/questions/7168497/undocumented-string-comparetonull-npe auch? –

+0

Ich setze die numDVDs am Anfang auf 0 ... –

+1

@studyenglish * es gibt * dein Problem dann ... Was bedeutet 'titles [-1]'? – Idos