2013-02-10 39 views
14

Tôi đã viết một chương trình trong đó nếu tập hợp mảng là giả sử {1, 3, 6, 7, 12}, nó sẽ trả về khoảng cách tối thiểu giữa hai số. Nói cách khác, đầu tiên nó sẽ tìm thấy sự khác biệt giữa 3 và 1, 6 và 3, 7 và 6, và 12 và 7. Sau khi sự khác biệt của chúng đạt được, nó sẽ trả về sự khác biệt nhỏ nhất, trong trường hợp của chúng ta 1, kể từ 6-7 = 1. Nếu chúng ta được đưa ra một tập hợp mảng {60}, ví dụ, chương trình sẽ trả về 0. Bây giờ nếu chúng ta có một tập hợp mảng {}, không có gì bên trong, nó cũng sẽ trả về 0. Tuy nhiên, tôi không thể có được chương trình của tôi để trả về 0! Nó ném một ngoại lệ. Tôi đã bỏ lỡ cái gì? Tôi nên giải quyết vấn đề này như thế nào? Đây là chương trình của tôi cho đến nay:Cách kiểm tra xem một mảng có trống không?

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

Cảm ơn bạn trước!

Trả lời

10

thử nghiệm của bạn:

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

nên được thực hiện trước khi bạn phân bổ một mảng có độ dài mà trong báo cáo kết quả dưới đây:

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

khác mà bạn đã tạo ra một loạt các kích thước -1, khi numberSet.length = 0. Đó là khá kỳ quặc. Vì vậy, hãy di chuyển if statement làm tuyên bố đầu tiên trong phương thức của bạn.

13

Để kiểm tra mảng là null:

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

Để kiểm tra mảng trống:

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

Đây không phải là những gì gây ra sự cố của OP. Anh ta nhận được một ngoại lệ vì anh ta KHÔNG kiểm tra độ dài trước khi anh ấy sử dụng nó ... và anh ấy đang sử dụng nó bằng cách cố tạo một mảng có độ dài '-1'. –

2

bạn có thể sử dụng yourArray.length để findout số phần tử trong một mảng.

Đảm bảo yourArray không rỗng trước khi thực hiện yourArray.length, nếu không bạn sẽ kết thúc bằng NullPointerException.

1

Vấn đề của bạn là bạn KHÔNG thử nghiệm độ dài của mảng cho đến khi quá muộn.

Nhưng tôi chỉ muốn chỉ ra rằng cách để giải quyết vấn đề này là ĐỌC THEO D STI TRACK.

Thông báo ngoại lệ sẽ cho bạn biết rõ là bạn đang cố gắng tạo một mảng có độ dài -1 và theo dõi sẽ cho bạn biết chính xác dòng mã nào của bạn đang thực hiện việc này. Phần còn lại là logic đơn giản ... làm việc trở lại lý do tại sao độ dài bạn đang sử dụng là -1.

Các vấn đề liên quan