- - PR -
Java関数から配列を返せますか?
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-01-16 11:17
お世話になります。
Javaの関数から一次元や二次元の配列をリターン値として 返せますか?例えば、下記の?所は何をいれて行けますか? ??? func(int x[5][6]) { return x; } 宜しくお願いします | ||||||||||||||||
|
投稿日時: 2007-01-16 11:32
返す配列が1次元か2次元か決まってないってことですか?
決まってるなら public int[] func() でしょうけど。。。 そもそも void func(int x[5][6]) ってコンパイル通ります?? | ||||||||||||||||
|
投稿日時: 2007-01-16 11:39
はい。返せます。
配列を返すサンプルは色々とあると思うので、人のソースを見て勉強することをオススメします。 シンプルに答えを言えば、変数の宣言部などと同じく、型を記載すれば良いです。 int[][] func(int x[][]){ return x; } とすればコンパイルできますね。 配列の次元が決まっていないのであれば Object 型で返して呼び出し元でキャストする必要があります。 Object func(String x[][]){ if(true){ return new String[1]; }else{ return new String[2][2]; } } 出来る限りコンパイル時に型を確定しておいてバグを減らそうと言う Java のコンセプトからすればあまりオススメしない方法ですが。 質問とは直接関係ありませんが、引数部の宣言で配列の長さを強制することはできないので "int x[5][6]" ではコンパイルが通らないと思います。 どうしても必要であれば assert をつかったり、範囲チェックをして IllegalArgumentException を投げるなどの工夫が必要になります。 | ||||||||||||||||
|
投稿日時: 2007-01-16 11:43
int x[][]; int[][] x; 両方書けるのですが、x[][]といった記述はC言語と合わせるために 残された記法ですが、あまり使わないほうがよいでしょう。 配列も型と考えて、方は左に記述する慣習になっているはず。 また、初期化する際に int x[][] = new int[5][6]; int[][] x = new int[5][6]; といった書き方になるので揃える意味合いでもint[][]とすべきでしょう。 | ||||||||||||||||
|
投稿日時: 2007-01-17 10:45
ご回答有難うございます。
ちなみに、下記のようにコールしていいですか? int[][] m; m=func(int[][] x); また、下記のように定義すればだめですか? public int[][] func( ) { int[][] x=new int[5][6]; return x; } 宜しくお願いいたします。 | ||||||||||||||||
|
投稿日時: 2007-01-17 10:56
やってみれば結果は一目瞭然だと思いますが。
func関数を呼ぶのに引数に型は書かなくていいと思います。
その定義でいくと引数なしメソッドになるので前述の
は
になるかと思います。 | ||||||||||||||||
|
投稿日時: 2007-01-17 11:07
「宜しくお願いいたします。」とはどういう意味ですか?
「私の代わりにコンパイルして結果を報告してください、宜しくお願いいたします。」 でしょうか。 記述の仕方について疑問をもたれるのはよいことですが、 せめてコンパイルできるかどうかぐらい試しましょう。 コンパイルできない記述は当然ながら駄目な記述です。 | ||||||||||||||||
|
投稿日時: 2007-01-17 11:08
るぱんです。
参考書買ってみてください。 ここで聞くより、すばやく終わりますよ。
[ メッセージ編集済み 編集者: るぱん 編集日時 2007-01-17 11:11 ] |
1