khởi tạo một mảng boolean trong java


102

Tôi có mã này

public static Boolean freq[] = new Boolean[Global.iParameter[2]];
freq[Global.iParameter[2]] = false;

Ai đó có thể cho tôi biết chính xác tôi đang làm gì sai ở đây và tôi sẽ sửa nó như thế nào? Tôi chỉ cần khởi tạo tất cả các phần tử mảng thành Boolean false. cảm ơn bạn

Câu trả lời:


285

Tôi chỉ cần khởi tạo tất cả các phần tử mảng thành Boolean false.

Sử dụng boolean[]thay thế để tất cả các giá trị được mặc định thành false:

boolean[] array = new boolean[size];

Hoặc sử dụng Arrays#fill()để lấp đầy toàn bộ mảng bằng Boolean.FALSE:

Boolean[] array = new Boolean[size];
Arrays.fill(array, Boolean.FALSE);

Cũng lưu ý rằng chỉ số mảng dựa trên 0. Các freq[Global.iParameter[2]] = false;dòng như bạn đã có thể gây ra ArrayIndexOutOfBoundsException. Để tìm hiểu thêm về mảng trong Java, hãy tham khảo hướng dẫn Oracle cơ bản này .


3
Đoạn mã thứ hai có lợi cho trường hợp chúng ta muốn khởi tạo nó (đặt nó) thành tất cả các giá trị thực. Câu trả lời chính xác!
despot

3
Tôi muốn đảo ngược tên biến và sử dụng khởi tạo mặc định với các giá trị sai.
BalusC

Tôi thực sự ủng hộ Boolean[] arrayvì nó cho phép bạn có ba trạng thái cho mỗi phần tử: true, falsenull, đó là hữu ích cho trường hợp bạn muốn lưu ý rằng cái gì là "không được xử lý".
Abhishek Divekar

20

Mảng sẽ được khởi tạo thành false khi bạn cấp phát nó.

Tất cả các mảng trong Java được khởi tạo thành giá trị mặc định cho kiểu. Điều này có nghĩa là mảng int được khởi tạo thành 0, mảng boolean được khởi tạo thành false và mảng kiểu tham chiếu được khởi tạo thành null.


12
Anh ấy đang sử dụng Boolean, không phải boolean, vì vậy nó sẽ mặc định null.
BalusC

1
Chính xác. Tôi không thấy điều đó. Arrays.fill nên thực hiện thủ thuật.
Jørgen Fogh

9

Mảng trong Java bắt đầu lập chỉ mục ở mức 0. Vì vậy, trong ví dụ của bạn, bạn đang đề cập đến một phần tử nằm ngoài mảng.

Nó có thể phải là một cái gì đó giống như freq [Global.iParameter [2] -1] = false;

Bạn sẽ cần phải lặp qua mảng để khởi tạo tất cả, dòng này chỉ khởi tạo phần tử cuối cùng.

Trên thực tế, tôi khá chắc chắn rằng false là mặc định cho boolean trong Java, vì vậy bạn có thể không cần khởi tạo chút nào.

Trân trọng


2
Anh ấy đang sử dụng Boolean, không phải boolean, vì vậy nó sẽ mặc định null.
BalusC

5

Chúng sẽ được khởi tạo falsetheo mặc định. Trong Java, mảng được tạo trên heap và mọi phần tử của mảng được cung cấp một giá trị mặc định tùy thuộc vào kiểu của nó. Đối với booleankiểu dữ liệu, giá trị mặc định là false.


3
Anh ấy đang sử dụng Boolean, không phải boolean, vì vậy nó sẽ mặc định null.
BalusC

i có nghĩa là để sử dụng boolean, xấu của tôi ... xin lỗi vì sự hiểu sai lệch
Leba-lev

2

public static Boolean freq [] = new Boolean [Global.iParameter [2]];

Global.iParameter [2]:

Nó phải là giá trị const


1
Đây không phải là sự thật. cũng có thể là các biến. vấn đề là bạn đang sử dụng Global.iParameter [2] để truy cập mảng. nhưng các chỉ số đang đi từ 0 cho đến khi chỉ Global.iParameter [2] -1 !!
Karussell
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.