- ベストアンサー
配列で戻り値を受け取りたい場合のエラーと解決方法
- 戻り値を配列で受け取りたい場合、エラーが発生してしまう場合があります。
- NullPointerExceptionエラーが出る場合、変数に値が入っていない可能性があります。
- 配列の受け渡しには、適切な書き方が必要です。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
先に正解を言ってしまいますと String[] a = test(); ではなく String[] a = new String[配列の長さ]; for(int i=0;i<a.length;i++){ a[i]=test()[i]; } かと思われます。 //"戻り値の型"をString[]型で"戻り値"aのメソッドを宣言 public String[] test(){ return a; } //"変数の型"をString[]型で"変数"aを宣言 String[] a; 扱うものが"変数"か"戻り値"かという差だけで扱い方は基本的に同じです。 //変数aはこのように扱います System.out.println(a[0]); //戻り値がaのtest()メソッドも当然このように扱います //戻り値a=test()なので System.out.println(test()[0]);
その他の回答 (4)
- nda23
- ベストアンサー率54% (777/1415)
要素数が不定な場合に戻り値が「配列」というのは如何なものかと… Javaのバーションにもよりますが、List<E>を使うのが普通でしょう。 Public List<String> test() { List<String> a = new ArrayList<String>(); while ( rs.next() ) { a.add(rs.getString("b")); } return a; }
お礼
回答ありがとうございます。 今回は固定長配列だったので普通の配列で無事に動きましたが、 教えていただいたプログラムも今後の参考にさせていただきます。 ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
ところで, 「配列は大きさを変更することができない」というのが問題となりえますよね. #3 の方法だと「配列の長さ」をあらかじめ知っておく必要があるんですが, そこは大丈夫ですか? もちろんすべての処理を頑張って手で書けばいいんですが, ArrayList などを使うことを検討した方がよいかもしれません.
お礼
回答ありがとうございます。 今回は固定長の配列だったのでString配列で大丈夫でした。 ArrayListも今後の参考にさせていただきます。 ありがとうございました。
- takoashi
- ベストアンサー率39% (21/53)
a は,String[]で、 rs.getString("b")は、String だからでは? a = rs.getString("b"); では、aが設定されていないので、 aに必ず値が入ってないです。 String[] a = test(); では、aはnullです。
補足
回答ありがとうございます。 すみません、コードを書き間違えていました。 public String[] test(){ String[] a = null; int i = 0; while(rs.next()){ a[i] = rs.getString("b"); i++; } return a; } //受け取り側 String[] a = test(); 変更後のプログラムは上記のようになっています。
- Tacosan
- ベストアンサー率23% (3656/15482)
「rs」が何か知らんけど, NullPointerException 以前にコンパイルエラーになるんじゃない?
お礼
すみません、質問のコードを書き間違えていました。 これではコンパイルエラーになりますよね。 申し訳ありませんでした。
補足
回答ありがとうございます。 きちんと書いていなくてすみません。 rsはresultSetです。 長くなってしまうので一部コードを省略しましたが、 コンパイルエラーにはなりませんでした。
お礼
回答ありがとうございます。 今は実際に試すことができないのですが、 明日にでも早速教えていただいたコードを参考に プログラムを直してみようと思います。 初歩的な質問に丁寧にお答えいただき、 ありがとうございました。