5

参照を使用せずに配列を渡そうとしていますが、値を直接使用しています:

    public static void main(String[] args){
            int[] result = insertionSort({10,3,4,12,2});
    }

    public static int[] insertionSort(int[] arr){
        return arr;
    }

しかし、それは次の例外を返します:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
Syntax error on token(s), misplaced construct(s)
Syntax error on token ")", delete this token

次のコードを試してみるとうまくいきます。理由を教えてください。

    public static void main(String[] args){
        int[] arr = {10,3,4,12,2};
        int[] result = insertionSort(arr);  
    }

    public static int[] insertionSort(int[] arr){
        return arr;
    }
4

4 に答える 4

10

それはする必要があります

int[] result = insertionSort(new int[]{10,3,4,12,2});

{10,3,4,12,2}配列初期化の構文糖衣であり、次のような宣言ステートメントを使用する必要があります -

int[] arr = {10,3,4,12,2};

次のようなものも許可されていません -

int[] arr; // already declared here but not initialized yet
arr = {10,3,4,12,2}; // not a declaration statement so not allowed
于 2012-09-30T18:08:51.550 に答える
5
insertionSort({10,3,4,12,2})

メソッド呼び出しでを指定していないため、有効な Java ではありません。JVM は、これがどのタイプの配列であるかを認識していません。double 値または int 値の配列ですか?

あなたができることはinsertionSort(new int[]{10, 3 ,4 12, 2});

于 2012-09-30T18:11:19.493 に答える
1

int[] array = { a, b, ...., n }は省略形の初期化です。次のように記述する必要があります。

int[] result = insertionSort(new int[]{10,3,4,12,2});

匿名で初期化します。

于 2012-09-30T18:10:06.513 に答える
1

他の人が言ったことに追加することはあまりありません。

new int[]{10,3,4,12,2}ただし、 (他の人が述べたように)使用する必要があり、Java で使用できない理由{10,3,4,12,2}は、Java が厳密に型指定されているためだと思います。

使用するだけ{10,3,4,12,2}では、配列要素の型が何であるかの手がかりはありません。それらは整数のように見えますが、、、、、などになる可能性がありintます...longfloatdouble

まあ、実際にはメソッドのシグネチャから型を推測して、合わないとコンパイルエラーになるのかもしれませんが、複雑そうです。

于 2012-09-30T18:13:43.093 に答える