java

2016-03-25 9 views
1

dizisinde parametre olarak dizi geçirilemedi Array as parametresini kabul eden doSomething() yöntemim var.java

package org.my; 

public class ArrayMistry { 

    public static void main(String ... args) { 
     doSomething({1,2});// Compilation Error 
    } 

    public static void doSomething(int[] params) { 

    } 

} 

alıyorum derleme hatası: Ben bağırma gibi dizi geçtikten sonra

Exception in thread "main" java.lang.Error: Unresolved compilation problems: Syntax error on token "doSomething", @ expected before this token Syntax error, insert "enum Identifier" to complete EnumHeader Syntax error, insert "EnumBody" to complete BlockStatements

at org.my.ArrayMistry.main(ArrayMistry.java:6)

Not:

Sonra feryat olarak onun Tamam geçirirseniz:

public static void main(String ... args) { 
    int[] p = {1,2}; 
    doSomething(p);// no Error 
    doSomething(new int[]{1,2});// no Error 
} 
+0

sorunu daha derinlemesine açıklayan bu yayını okuyun: http://stackoverflow.com/questions/5387643/array-initialization-syntax-when-not-in-a-declaration –

cevap

1

Diziler referans ile geçirilir. [1,2] ile bir dizi nesnesi oluşturmanız ve oluşturulan nesnenin referansını dosomething'a iletmeniz gerekir. new anahtar sözcüğü, bu int dizisinin oluşturulması için alan ayırır.

int[] arr = new int[]{1,2}; 
doSomething(arr); 
0

O var çünkü {1, 2} 'yi yeni bir dizi olarak bildirmiyorsunuz. Düzgün çalışması için new int[]{1,2} olarak bildirilmelidir, aksi halde bir dizi oluşturmazsınız.

0

Yöntemi bu şekilde başlattığınız için bir yönteme geçmek için bir dizi oluşturmanız gerekir. Bu doSomething({1,2});'un çalışmadığı nedeni, dizinin başlatılmamış olması ve {1, 2} bir dizi olmaması nedeniyle bir parantez içinde yalnızca birkaç sayı olmasıdır. Eğer bir dizi göndermek istiyorsa Özellikle onun parametreleri olarak tamsayı dizisi kabul bu

int[] p = {1,2}; 
doSomething(p); 
0

Kişisel yöntemle doSomething() gibi bir şey yapmak zorunda. işe yaradı her iki durumda da

Not, ya mevcut bir dizi geçirilmesi veya bunu geçerken yenisini oluşturdu.

orijinal örnekte, ayrılmış hafızası olmayan sayıların keyfi bir dizi geçiyoruz veya belirtilenleri yazın.

0

sorunu çözmek için başka bir yol gibi hareket için bir parametre olarak bir referans geçen gereğidir:

doSomething(new int[]{1,2});