Làm thế nào để khởi tạo một mảng trong Java?


434

Tôi đang khởi tạo một mảng như thế này:

public class Array {

    int data[] = new int[10]; 
    /** Creates a new instance of Array */
    public Array() {
        data[10] = {10,20,30,40,50,60,71,80,90,91};
    }     
}

NetBeans chỉ ra lỗi tại dòng này:

data[10] = {10,20,30,40,50,60,71,80,90,91};

Làm thế nào tôi có thể giải quyết vấn đề?


3
Bạn có thể thay thế "int data [] = new int [10]" bằng "int data []". Bạn đang lãng phí bộ nhớ ở đó.
missingfaktor

Câu trả lời:


642
data[10] = {10,20,30,40,50,60,71,80,90,91};

Trên đây là không chính xác (lỗi cú pháp). Nó có nghĩa là bạn đang gán một mảng chodata[10] có thể chứa chỉ một phần tử.

Nếu bạn muốn khởi tạo một mảng, hãy thử sử dụng Trình khởi tạo mảng :

int[] data = {10,20,30,40,50,60,71,80,90,91};

// or

int[] data;
data = new int[] {10,20,30,40,50,60,71,80,90,91};

Lưu ý sự khác biệt giữa hai khai báo. Khi gán một mảng mới cho một biến được khai báo, newphải được sử dụng.

Thậm chí nếu bạn sửa cú pháp, việc truy cập data[10]vẫn chạy sai (Bạn có thể truy cập chỉ data[0]để data[9]vì chỉ số của mảng trong Java là dựa trên 0). Việc truy cập data[10]sẽ tạo ra một ArrayIndexOutOfBoundException .


2
Trên thực tế, lý do chính nó không chính xác là nó là một lỗi cú pháp! AIOB sẽ chỉ xảy ra nếu cú ​​pháp được chấp nhận.
Stephen C

1
Bạn có thể vui lòng giúp tôi không, nếu tôi khai báo một mảng như thế này: public static void product(int[] array){ int[] productArray = new int[array.length];và muốn đặt tất cả các giá trị productArray bằng 0 , tôi nên viết gì? (Tôi nghĩ rằng tôi nên viết một vòng lặp và đặt tất cả các giá trị về 0, có cách nào tốt hơn để làm điều này không?)
Hengameh

2
@Hengameh: Nó được khởi tạo thành 0 theo mặc định. Xem stackoverflow.com/a/2154340/1000655
Neal Gokli

39

Thử data = new int[] {10,20,30,40,50,60,71,80,90,91 };


1
+1. Bạn có một cú đúp mở thêm. Người ta cũng có thể viết: data [0] = 10; dữ liệu [1] = 20; .... sau int data [] = new int [10], nhưng nó quá nhiều mã và cuối cùng nó sẽ làm điều tương tự.
Hamish Grubijan

28

Khi bạn tạo một mảng có kích thước 10, nó phân bổ 10 vị trí nhưng từ 0 đến 9. Vòng lặp for này có thể giúp bạn thấy điều đó tốt hơn một chút.

public class Array {
    int[] data = new int[10]; 
    /** Creates a new instance of an int Array */
    public Array() {
        for(int i = 0; i < data.length; i++) {
            data[i] = i*10;
        }
    }
}

16

Bạn có thể làm:

int[] data = {10,20,30,40,50,60,71,80,90,91};

3
Tôi đang tự hỏi giá trị này bổ sung vào đầu câu trả lời được chấp nhận từ 5 năm trước.
TylerH

12

Cú pháp

 Datatype[] variable = new Datatype[] { value1,value2.... }

 Datatype variable[]  = new Datatype[] { value1,value2.... }

Thí dụ :

int [] points = new int[]{ 1,2,3,4 };

8

Thay vì học các trang web không chính thức, hãy học hỏi từ trang web oracle

liên kết sau: Bấm vào đây

* Bạn có thể tìm thấy Khởi tạo cũng như khai báo với mô tả đầy đủ *

int n; // size of array here 10
int[] a = new int[n];
for (int i = 0; i < a.length; i++)
{
    a[i] = Integer.parseInt(s.nextLine()); // using Scanner class
}

Đầu vào : 10 // kích thước mảng 10 20 30 40 50 60 71 80 90 91

Hiển thị dữ liệu:

for (int i = 0; i < a.length; i++) 
{
    System.out.println(a[i] + " ");
}

Đầu ra: 10 20 30 40 50 60 71 80 90 91


3

Bạn không thể khởi tạo một mảng như thế. Ngoài những gì người khác đã đề xuất, bạn có thể làm:

data[0] = 10;
data[1] = 20;
...
data[9] = 91;

3

Nếu bạn muốn khởi tạo một mảng trong hàm tạo, bạn không thể sử dụng các trình khởi tạo mảng đó như thế nào.

data= {10,20,30,40,50,60,71,80,90,91};

Chỉ cần thay đổi nó thành

data = new int[] {10,20,30,40,50,60,71,80,90,91};

Bạn không phải chỉ định kích thước với data[10] = new int[] { 10,...,91} Chỉ cần khai báo thuộc tính / trường int[] data;và khởi tạo nó như trên. Phiên bản sửa mã của bạn sẽ trông như sau:

public class Array {

    int[] data;

    public Array() {
        data = new int[] {10,20,30,40,50,60,71,80,90,91};
    }

}

Như bạn thấy khung là trống rỗng. Không cần phải nói kích thước giữa các dấu ngoặc, bởi vì khởi tạo và kích thước của nó được chỉ định bởi số phần tử giữa các dấu ngoặc nhọn.


2

bạn đang cố gắng đặt phần tử thứ 10 của mảng thành mảng thử

data = new int[] {10,20,30,40,50,60,71,80,90,91};

FTFY


0

Có lẽ điều này sẽ làm việc:

public class Array {

    int data[] = new int[10]; 
    /* Creates a new instance of Array */
    public Array() {
        data= {10,20,30,40,50,60,71,80,90,91};
    }
}

6
Điều này khác với câu hỏi như thế nào? Hãy mở rộng câu trả lời của bạn!
Alexander Vogt

2
Trình khởi tạo mảng không được phép trong các nhà xây dựng !!!! Ít nhất bạn nên kiểm tra các đề xuất của mình, trước khi đăng chúng ...
Sedat Kilinc
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.