2013-01-23 35 views
15

Tôi đã tự hỏi liệu có tốt hơn để có phương thức này hay không và chuyển số Array sang phương thức đó hoặc viết nó ra mỗi lần tôi muốn kiểm tra xem một số có nằm trong array hay không.Lặp lại qua mảng - java

Ví dụ:

public static boolean inArray(int[] array, int check) { 
    for (int i = 0; i < array.length; i++){ 
     if (array[i] == check) 
      return true; 
      } 
    return false; 
} 

Thanks for the help trước!

Trả lời

7

Bạn chắc chắn nên đóng gói logic này vào một phương pháp.

Không có lợi ích khi lặp lại mã giống nhau nhiều lần.

Ngoài ra, nếu bạn đặt logic trong một phương thức và nó thay đổi, bạn chỉ cần sửa đổi mã của mình ở một nơi.

Có hay không bạn muốn sử dụng thư viện của bên thứ ba là một quyết định hoàn toàn khác.

6

Nếu bạn đang sử dụng mảng (và thuần túy là mảng), tra cứu "chứa" là O(N), vì trường hợp xấu nhất, bạn phải lặp lại toàn bộ mảng. Bây giờ nếu mảng được sắp xếp, bạn có thể sử dụng tìm kiếm nhị phân, làm giảm thời gian tìm kiếm thành log(N) với chi phí sắp xếp.

Nếu đây là cái gì đó được gọi nhiều lần, đặt nó vào một hàm:

private boolean inArray(int[] array, int value) 
{ 
    for (int i = 0; i < array.length; i++) 
    { 
     if (array[i] == value) 
     { 
      return true; 
     } 
    } 
    return false; 
} 
+2

Sự khác nhau về chức năng trong bài đăng gốc như thế nào? Ngoài ra, như một yêu cầu cá nhân, niềng răng là một điều tuyệt vời cho những người học ngôn ngữ. – JustinKSU

+0

@JustinKSU +1 để đề xuất _always_ sử dụng dấu ngoặc cho câu lệnh if và cho vòng lặp. Và có, mã trên giống hệt mã OP. – jahroy

+1

@JustinKSU chỉ cần sao chép/dán bài đăng của OP (đó là lý do tại sao không có niềng răng). Thêm chức năng để được giống như không có thay đổi cần thiết và nó phục vụ để trả lời câu hỏi hai phần của OP. – Woot4Moo

5

Bạn có thể nhập các org.apache.commons.lang.ArrayUtils lib

Có một phương pháp tĩnh nơi bạn có thể chuyển vào một mảng int và một giá trị để kiểm tra.

chứa (int [] mảng, int valueToFind) Kiểm tra xem giá trị có nằm trong mảng đã cho không.

ArrayUtils.contains(intArray, valueToFind); 

ArrayUtils API

32

Vì ít nhất Java 1.5.0 (Java 5) mã có thể được làm sạch một chút. Array s và bất cứ điều gì mà thực hiện Iterator (ví dụ Collection s) có thể được looped như vậy:

public static boolean inArray(int[] array, int check) { 
    for (int o : array){ 
     if (o == check) { 
     return true; 
     } 
    } 
    return false; 
} 

Trong Java 8 bạn cũng có thể làm điều gì đó như:

public static boolean inArray(int[] array, int check) { 
    return Arrays.asList(array).anyMatch(x -> x == check); 
} 

Mặc dù chuyển sang một dòng cho điều này là có lẽ quá mức cần thiết.