2016-11-15 12 views
0

これは愚かな問題かもしれません。私は達成したいことがはっきりしていると信じていますが、私はそれの構文を考えることはできません。私が持っているとします:ベクトルをJavaのパラメータとして送信

public void foo(int[] v){ 

} 
public static void main(String args[]){ 
    foo({1, 2, 3}); 
} 

新しい配列を宣言することなくfooを呼び出すことはできますか?はいの場合、どうですか?

+1

新しい配列を宣言する必要があります。変数に代入する必要はありません。 –

+0

これはうまくいくようです。愚か私はfooを試していない(新しいint [] {1,2,3}); –

答えて

4

あなたのコードはあなたが書いた方法でコンパイルされません。しかし、これは意志、そして多分それはあなたが何をしたいです:

ここ
public void foo(int... v) { 
    // ... 
} 

public static void main(String args[]) { 
    foo(1, 2, 3); 
} 

fooに渡された値が自動的に配列に変換されます。 vの値は、実際にはint[]になります。また

fooの元の署名を維持し、 あなたはこのように書かれている可能性があり:

public void foo(int[] v) { 
    // ... 
} 

public static void main(String args[]) { 
    int[] params = {1, 2, 3}; 
    foo(params); 
} 

あなたが書いたようにfoo({1, 2, 3})にそうでない場合は、これらの2つの行を結合することはできません。

それとも、このように記述することができます。

public static void main(String args[]) { 
    foo(new int[]{1, 2, 3}); 
} 

私は最初のバージョンで書いたint...構文は、「可変引数」と呼ばれ、 あなたはそれについての詳細を読みたい場合。 初心者の方には、 という落とし穴がありますので、使用することはお勧めしません。 というより便利です。 現在は2番目または3番目のバージョンに固執しています。

+0

@BillMackそれはいいです、私の更新された答えを見てください。 – janos

関連する問題