2009-03-07 55 views
5

Nếu tôi có một mảng int có cấu trúc như thế này:Làm thế nào để kiểm tra xem một phần tử trong mảng tồn tại trong Java

private int[][] map = new int[400][400]; 

Và tôi cố gắng để lấy

map[100][200] 

Và yếu tố đó không được khởi tạo , tôi sẽ nhận được một trình biên dịch/lỗi thời gian chạy hoặc nó sẽ trả về null? Và có chức năng nào để kiểm tra xem một phần tử/chỉ mục đã tồn tại/đã được thiết lập chưa?

+1

Tiêu đề câu hỏi này có thể được chỉnh sửa để rõ ràng hơn – Casebash

+0

Vui lòng thay đổi title.wastage của tym ..... –

Trả lời

11

Khi khai báo mảng của bạn thuộc loại nguyên thủy, bạn sẽ không nhận được bất kỳ lỗi trình biên dịch hoặc lỗi thời gian chạy nào - giá trị mặc định bằng 0 sẽ được trả về.

Nếu mảng của bạn là một mảng đối tượng, thì mảng sẽ giữ null cho bất kỳ phần tử nào không được chỉ định cụ thể.

1

số

phần tử mảng của bạn chỉ đủ lớn để giữ int s, trong trường hợp này. Không có nơi nào để lưu trữ thông tin về nếu phần tử "tồn tại". Nó đã được phân bổ, do đó nó tồn tại. Trong Java, các mảng int mới được phân bổ sẽ được khởi tạo cho tất cả các phần tử không.

3

Tôi sẽ không trả lại nullint là loại nguyên thủy. Nó sẽ trả về giá trị mặc định int, là 0.

Không có cách nào để biết liệu có bất kỳ phần tử nào đã được đặt hay không, ngắn giữ một mảng boolean riêng biệt.

+0

Nếu nó là một mảng của một đối tượng lớp/enum tùy chỉnh, nó sẽ trả về null nếu mục/chỉ mục đó không được đặt? –

+0

@Click Upvote: Có. –

2

Trong Java, chỉ các biến tham chiếu mới được khởi tạo thành null. Nguyên thủy được đảm bảo trả lại appropriate default values. Đối với ints, giá trị này là 0.

0

Bạn có thể sử dụng checkstyle, pmdfindbugs trên nguồn của mình (tìm kiếm trên nhị phân) và chúng sẽ cho bạn biết những điều như thế này.

Rất tiếc, có vẻ như họ không gặp vấn đề cụ thể này (điều này có nghĩa là mảng được đảm bảo để mỗi thành viên được đặt thành 0, null hoặc false).

Việc sử dụng các công cụ này có thể bắt các thành viên lớp và cá thể (không phải là mảng) đang được sử dụng trước khi được gán giá trị (loại tương tự).

0

Bit của một chủ đề đã chết nhưng tôi vô tình tìm thấy nó vì vậy tôi sẽ đặt mảnh trí tuệ của tôi (hoặc bất cứ điều gì: P). Bạn có thể sử dụng Arrays.Fill để điền vào mảng của bạn khi nó được tạo ra với một giá trị không hợp lệ như -1. Sau đó, bạn có thể dễ dàng làm một nếu x < 0 để kiểm tra xem bạn đã khởi tạo vị trí mảng cụ thể đó hay chưa. Chỉ cần một ý tưởng ...

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