문제

초기화 목록 {...}을 생성자에 전달하려고 했지만 작동하지 않았습니다.대신 메서드 로컬 변수(int[])에서 선언했을 때 완벽하게 작동했습니다.

왜 그런 겁니까?

public class QuickSort {
    int[] a;

    public QuickSort(int[] a) {
        this.a = a;
    }

    public static void main(String[] args) {
        // ###################
        // ###    WORKS     ##
        // ###################
        int[] a = {8,12,79,12,50,44,8,0,7,289,1};
        QuickSort sort = new QuickSort(a);

        // ###################
        // ### DOESN'T WORK ##
        // ###################
        //QuickSort sort = new QuickSort({8,12,79,12,50,44,8,0,7,289,1});
    }
}
도움이 되었습니까?

해결책

선언 할 때 int[] 그리고 할당 {1, 2, 3} 컴파일러는 당신이 당신이 만들고 싶다는 것을 알고 있습니다 int[] 바로 거기에 철자가 있습니다.

후자의 경우 배열을 메소드 호출에 직접 붙이는 경우 사용해야합니다.

QuickSort sort = new QuickSort(new int[] {8,12,79,12,50,44,8,0,7,289,1});

컴파일러에 배열이 무엇인지 알려줍니다.

다른 팁

그만큼 {} 구문은 배열 초기화라고 하며 Java에서 배열을 초기화하는 데 사용됩니다.(참조: 섹션 10.6:배열 초기화 프로그램 ~에서 Java 언어 사양, 제3판.)

합격한 이유 {1, 2, 3} 자체가 유효하지 않은 이유는 이니셜라이저와 연결된 유형 정보가 없기 때문입니다.

그러므로 컴파일러에게 배열의 유형이 다음과 같이 작성되어 있음을 알려야 합니다. new Type[], 여기서 Type 배열이 만들어지는 유형입니다.

다음은 모두 배열 초기화 프로그램의 유효한 사용입니다:

  • new String[] {"Hello, "World"}
  • new Character[] {'A', 'B'}
  • new Runnable[] {new Runnable() {public void run() {}}, new Runnable() {public void run() {}}

보시다시피, 이 표기법은 다양한 데이터 유형에 사용될 수 있으므로 정수에만 해당되는 것이 아닙니다.

에 관해서는:

int[] a = {1, 2, 3};

위의 내용이 유효한 이유는 변수 유형 선언에서 유형 정보가 컴파일러에 제공되기 때문입니다. int[].위의 내용이 의미하는 바는 다음과 같습니다.

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

이제 우리가 가지고 있다면 new int[] {1, 2, 3}, 우리는 새로운 것을 만들 수 있습니다 int[] 배열이 제자리에 있으므로 다른 방식으로 처리할 수 있습니다. int[] 배열은 관련 변수 이름이 없다는 것입니다.

따라서 다음에 의해 생성된 배열은 new int[] {1, 2, 3} 메소드나 생성자로 전송될 수 있습니다. int[] 인수로 :

new Quicksort(new int[] {1, 2, 3});  // This will work.

초기화 목록에 입력 정보가 ​​없기 때문일 수 있습니다.이 시도:

QuickSort sort = new QuickSort(new int[] {8,12,79,12,50,44,8,0,7,289,1});

당신은 또한 이것을 좋아할 수 있습니다 :

public class QuickSort {
    int[] a;

    public QuickSort(int ... a) {
        this.a = a;
    }

    public static void main(String[] args) {

        QuickSort sort = new QuickSort(8,12,79,12,50,44,8,0,7,289,1);
    }
}

Java에는 실제로 유형의 추론이 없습니다. 배열 변수 선언은 a 특별한 경우 Java 언어 사양에서는 메소드 매개 변수에 적용되지 않는 것입니다. 그렇게 할 수는 있지만 { "a", "b"}와 같은 질문을 처리해야하기 때문에 사양에 많은 복잡성을 더할 것입니다. 그러나 복잡한 유형 계층 구조의 객체라면 어떨까요? 메소드가 과부하되고 두 버전이 모두 존재하면 어떻게됩니까?

곱슬 브레이스 (배열 리터럴에서 사용될 때) 배열을 선언 할 때만 사용할 수 있습니다 :)

목록을 생성자에게 전달하기 전에 목록을 int []에 캐스팅 해 보셨습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top