2013-02-10 15 views
14

Ich habe ein Programm geschrieben, wo, wenn das Array-Set sagen wir {1, 3, 6, 7, 12}, es seine minimale Lücke zwischen zwei Zahlen zurückgibt. Mit anderen Worten, es werden zuerst die Unterschiede zwischen 3 und 1, 6 und 3, 7 und 6 und 12 und 7 gefunden. Nachdem ihre Unterschiede erreicht sind, wird sie die geringste Differenz, in unserem Fall 1, seit 6-7, zurückgeben = 1. Wenn wir beispielsweise eine Array-Menge von {60} erhalten, gibt das Programm 0 zurück. Wenn wir nun eine Array-Menge von {} hätten, in der nichts drin ist, gibt es auch 0 zurück. Jedoch kann ich mein Programm nicht dazu bringen, eine 0 zurückzugeben! Es löst eine Ausnahme aus. Was habe ich verpasst? Wie soll ich dieses Problem lösen? Hier ist mein Programm so weit:Wie überprüft man, ob ein Array leer ist?

public static void main(String[] args) { 
    int[] numberSet = {1, 3, 6, 7, 12}; 
    //int[] numberSet = {}; 
    System.out.println(minGap(numberSet));  
} 

public static int minGap(int[] numberSet) { 
    int[] differenceArray = new int[numberSet.length-1]; 
    int smallestNum = 0; 
    if (numberSet.length < 2) { 
     return 0; 
    } 
    else { 
     for(int i = 0; i < numberSet.length-1; i++) { 
      differenceArray[i] = numberSet[i+1] - numberSet[i]; 
     }  
     Arrays.sort(differenceArray); 
     smallestNum = differenceArray[0]; 
     return smallestNum; 
    } 
} 

Vielen Dank im Voraus!

Antwort

10

Ihr Test:

if (numberSet.length < 2) { 
    return 0; 
} 

durchgeführt werden sollte, bevor Sie eine Reihe von dieser Länge in der folgenden Aussage zuordnen:

int[] differenceArray = new int[numberSet.length-1]; 

sonst sind Sie bereits eine Reihe von Größe zu schaffen -1, wenn die numberSet.length = 0. Das ist ziemlich merkwürdig. Also, verschieben Sie Ihre if statement als erste Anweisung in Ihrer Methode.

13

Array Um zu überprüfen, ist null:

int arr[] = null; 
if (arr == null) { 
System.out.println("array is null"); 
} 

Um zu überprüfen, Array leer ist:

arr = new int[0]; 
if (arr.length == 0) { 
System.out.println("array is empty"); 
} 
+0

Dies ist nicht das, was das OP-Problem verursacht. Er bekommt eine Ausnahme, weil er NICHT die Länge testet, bevor er sie benutzt ... und er benutzt sie, indem er versucht, ein Array mit der Länge -1 zu erzeugen. –

2

Sie yourArray.length verwenden Anzahl der Elemente in einem Array findout.

Vergewissern Sie sich, dass IhrArray nicht null ist, bevor Sie yourArray.length tun, andernfalls werden Sie mit NullPointerException enden.

1

Ihr Problem ist, dass Sie die Länge des Arrays NICHT testen, bis es zu spät ist.

Aber ich möchte nur darauf hinweisen, dass der Weg zur Lösung dieses Problems LESEN DER STACK TRACE ist.

Die Ausnahmebedingungsnachricht wird Ihnen klar sagen, dass Sie versuchen, ein Array mit der Länge -1 zu erstellen, und die Ablaufverfolgung wird Ihnen genau sagen, welche Zeile Ihres Codes dies tut. Der Rest ist eine einfache Logik, die darauf hinarbeitet, warum die Länge, die Sie verwenden, -1 ist.

Verwandte Themen