Java에서 배열을 초기화하는 방법은 무엇입니까?


434

다음과 같이 배열을 초기화하고 있습니다.

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는 다음 줄에서 오류를 가리 킵니다.

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

문제를 어떻게 해결할 수 있습니까?


3
"int data [] = new int [10]"을 "int data []"로 바꿀 수 있습니다. 당신은 거기에 메모리를 낭비하고 있습니다.
missingfaktor 2009

답변:


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

위의 내용이 올바르지 않습니다 (구문 오류). 그것은 배열을 할당한다는 것을 의미합니다.data[10] 요소 만 보유 할 수 입니다.

배열을 초기화하려면 Array Initializer를 사용해보십시오 .

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

두 선언의 차이점에 유의하십시오. 선언 된 변수에 새 배열을 할당 할 때는 new사용해야합니다.

당신이 구문을 수정하더라도, 액세스는 data[10](당신 만 액세스 할 수 있습니다 여전히 잘못 data[0]data[9]자바에서 배열의 인덱스이기 때문에 0 기반). 액세스 data[10]하면 ArrayIndexOutOfBoundsException이 발생 합니다.


2
실제로, 그것이 틀린 주요한 이유는 그것이 구문 에러이기 때문입니다! AIOB는 구문이 수용 가능한 경우에만 발생합니다.
Stephen C

1
다음 public static void product(int[] array){ int[] productArray = new int[array.length];과 같이 배열을 선언하고 모든 값을 productArray 0 으로 설정하려면 어떻게해야합니까? (나는 루프를 작성하고 모든 값을 0으로 설정해야한다고 생각합니다. 더 좋은 방법이 있습니까?)
Hengameh

2
@Hengameh : 기본적으로 0으로 초기화됩니다. 참조 stackoverflow.com/a/2154340/1000655
닐 Gokli

39

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


1
+1. 여분의 오프닝 브레이스가 있습니다. 다음과 같이 쓸 수도 있습니다 : data [0] = 10; 데이터 [1] = 20; .... int data [] = new int [10] 이후에 코드가 너무 많아서 같은 일을하게됩니다.
Hamish Grubijan 2009

28

크기가 10 인 배열을 만들면 10 개의 슬롯을 할당했지만 0에서 9까지 할당합니다.이 for 루프는 조금 더 잘 알 수 있습니다.

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

넌 할 수있어:

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

3
5 년 전부터 받아 들여진 대답에 이것이 어떤 가치를 더하는지 궁금합니다.
TylerH

12

통사론

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

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

예 :

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

8

비공식 웹 사이트를 배우는 대신 Oracle 웹 사이트에서 배우십시오

링크는 다음과 같습니다 : 여기를 클릭하십시오

* 당신은 전체 설명과 함께 초기화뿐만 아니라 선언을 찾을 수 있습니다 *

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
}

입력 : 10 // 배열 크기 10 20 30 40 50 60 71 80 90 91

데이터 표시 :

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

출력 : 10 20 30 40 50 60 71 80 90 91


3

그런 배열은 초기화 할 수 없습니다. 다른 사람들이 제안한 것 외에도 다음을 수행 할 수 있습니다.

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

3

생성자에서 배열을 초기화하려면 해당 배열 초기화 프로그램을 사용할 수 없습니다.

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

그냥 변경

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

data[10] = new int[] { 10,...,91} 속성 / 필드를 선언하고 int[] data;위와 같이 초기화 하여 크기를 지정할 필요가 없습니다 . 수정 된 코드 버전은 다음과 같습니다.

public class Array {

    int[] data;

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

}

보시다시피 괄호가 비어 있습니다. 초기화와 그 크기는 중괄호 사이의 요소 수에 의해 지정되므로 대괄호 사이의 크기를 알 필요가 없습니다.


2

배열의 10 번째 요소를 배열로 설정하려고합니다.

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

FTFY


0

어쩌면 이것이 효과가있을 것입니다 :

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
이것이 질문과 어떻게 다릅니 까? 답변을 연장하십시오!
Alexander Vogt

2
배열 이니셜 라이저는 생성자에서 사용할 수 없습니다 !!!! 당신은해야 ...를 게시하기 전에 제안 적어도 시험에서
Sedat Kilinc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.