2013-02-10 12 views
14

Napisałem program, w którym jeśli zbiór macierzyński nazywa się {1, 3, 6, 7, 12}, zwróci on swoją minimalną przerwę między dwiema liczbami. Innymi słowy, najpierw odkryje różnice między 3 a 1, 6 i 3, 7 i 6 oraz 12 i 7. Po osiągnięciu różnic, zwróci najmniejszą różnicę, w naszym przypadku 1, od 6-7 = 1. Jeśli na przykład otrzymamy zestaw tablic {60}, program zwróci 0. Teraz, jeśli mamy zestaw tablic {}, gdzie nic nie jest w środku, to zwróci również 0. Jednak nie mogę uzyskać programu, który zwróci 0! Zgłasza wyjątek. Co mnie ominęło? Jak mam rozwiązać ten problem? Oto mój program do tej pory:Jak sprawdzić, czy tablica jest pusta?

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; 
    } 
} 

Z góry dziękuję!

Odpowiedz

10

test:

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

należy zrobić przed przydzielić tablicę tej długości w poniższym stwierdzeniem:

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

jeszcze jesteś już tworząc tablicę wielkości -1, gdy numberSet.length = 0. To dość dziwne. Tak, przenieś swój if statement jako pierwszą instrukcję w twojej metodzie.

13

Aby sprawdzić tablicę jest zerowy:

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

Aby sprawdzić tablica jest pusta:

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

To nie jest przyczyna problemu PO. Dostaje wyjątek, ponieważ NIE bada długości, zanim go użyje ... i używa go, próbując utworzyć tablicę o długości '-1". –

2

można użyć yourArray.length do findout liczbę elementów w tablicy.

Upewnij się, że twoja tablica nie ma wartości null przed wykonaniem yourArray.length, w przeciwnym razie otrzymasz numer NullPointerException.

1

Twój problem polega na tym, że NIE testujesz długości tablicy, dopóki nie jest za późno.

Ale chcę tylko zwrócić uwagę, że sposobem na rozwiązanie tego problemu jest ODCZYTAJ ŚLEDZENIE STACJONARNE.

Komunikat o wyjątku wyraźnie mówi, że próbujesz utworzyć tablicę o długości -1, a ślad pokaże ci dokładnie, która linia kodu to robi. Reszta to prosta logika ... wracając do tego, dlaczego długość, której używasz, wynosi -1.

Powiązane problemy