2013-02-10 77 views
14

Bir program yazdım, burada dizinin ayarlanması durumunda {1, 3, 6, 7, 12} diyelim, iki sayı arasındaki minimum boşluğa dönecektir. Diğer bir deyişle, öncelikle 3 ile 1, 6 ve 3, 7 ve 6, 12 ve 7 arasındaki farkları bulacaktır. Farklılıkları elde edildikten sonra, 6-7'den beri bizim durumumuzda en az farkı geri getirecektir. = 1. Eğer bir dizi {60} kümesi verildiyse, örneğin, program 0 değerini döndürecektir. Şimdi bir dizinin {} olduğu, hiçbir şeyin içinde olmadığı bir dizi varsa 0 da dönecektir. Ancak, programımı 0'a döndüremem! Bir istisna atar. Ne kaçırdım? Bu sorunu nasıl çözmeliyim? Programım şu ana kadar:Dizinin boş olup olmadığını nasıl kontrol edebilirim?

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

Şimdiden teşekkürler! dizi kontrol etmek için

cevap

10

Testiniz: Başka

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

Zaten, ne zaman boyutunda -1 bir dizi oluştururken: Aşağıda açıklamada belirttiği uzunlukta bir dizi tahsis önce

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

yapılmalı numberSet.length = 0. Bu oldukça tuhaf. Yani, if statement yöntemini yönteminizin ilk ifadesi olarak taşıyın.

13

null:

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

dizi boş olup olmadığını kontrol etmek için: bir dizi eleman sayısını findout için yourArray.length kullanabilir

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

Bunlar OP'nin sorununa neden olan değil. Bir istisna oluyor çünkü onu kullanmadan önce uzunluğu test etmiyor ... ve sonuç olarak '-1' uzunluğunda bir dizi oluşturmaya çalışarak kullanıyor. –

2

.

Arterinizin yourArray.length yapmadan önce boş olmadığından emin olun aksi takdirde NullPointerException ile biter.

1

Sorununuz, dizinin uzunluğunu çok geç olana kadar SINIRSINIZ.

Ama sadece bu sorunu çözmenin yolunun DİKİŞ İZLEME OKUMASI olduğunu belirtmek istiyorum.

Kural dışı durum iletisi, -1 uzunluğunda bir dizi oluşturmaya çalıştığınızı açıkça gösterecektir ve izleme, kodunuzun tam olarak hangi satırı yaptığını size söyleyecektir. Geri kalan basit bir mantık ... kullandığınız uzunluğun neden -1 olduğunu öğrenmek.

İlgili konular