• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:戻り値を配列で受け取りたいのですが...)

配列で戻り値を受け取りたい場合のエラーと解決方法

このQ&Aのポイント
  • 戻り値を配列で受け取りたい場合、エラーが発生してしまう場合があります。
  • NullPointerExceptionエラーが出る場合、変数に値が入っていない可能性があります。
  • 配列の受け渡しには、適切な書き方が必要です。

質問者が選んだベストアンサー

  • ベストアンサー
  • zozy
  • ベストアンサー率60% (20/33)
回答No.3

先に正解を言ってしまいますと 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]);

kingyo0c0
質問者

お礼

回答ありがとうございます。 今は実際に試すことができないのですが、 明日にでも早速教えていただいたコードを参考に プログラムを直してみようと思います。 初歩的な質問に丁寧にお答えいただき、 ありがとうございました。

その他の回答 (4)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.5

要素数が不定な場合に戻り値が「配列」というのは如何なものかと… Javaのバーションにもよりますが、List<E>を使うのが普通でしょう。 Public List<String> test() {   List<String> a = new ArrayList<String>();   while ( rs.next() ) {     a.add(rs.getString("b"));   }   return a; }

kingyo0c0
質問者

お礼

回答ありがとうございます。 今回は固定長配列だったので普通の配列で無事に動きましたが、 教えていただいたプログラムも今後の参考にさせていただきます。 ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

ところで, 「配列は大きさを変更することができない」というのが問題となりえますよね. #3 の方法だと「配列の長さ」をあらかじめ知っておく必要があるんですが, そこは大丈夫ですか? もちろんすべての処理を頑張って手で書けばいいんですが, ArrayList などを使うことを検討した方がよいかもしれません.

kingyo0c0
質問者

お礼

回答ありがとうございます。 今回は固定長の配列だったのでString配列で大丈夫でした。 ArrayListも今後の参考にさせていただきます。 ありがとうございました。

  • takoashi
  • ベストアンサー率39% (21/53)
回答No.2

a は,String[]で、 rs.getString("b")は、String だからでは? a = rs.getString("b"); では、aが設定されていないので、 aに必ず値が入ってないです。 String[] a = test(); では、aはnullです。

kingyo0c0
質問者

補足

回答ありがとうございます。 すみません、コードを書き間違えていました。  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)
回答No.1

「rs」が何か知らんけど, NullPointerException 以前にコンパイルエラーになるんじゃない?

kingyo0c0
質問者

お礼

すみません、質問のコードを書き間違えていました。 これではコンパイルエラーになりますよね。 申し訳ありませんでした。

kingyo0c0
質問者

補足

回答ありがとうございます。 きちんと書いていなくてすみません。 rsはresultSetです。 長くなってしまうので一部コードを省略しましたが、 コンパイルエラーにはなりませんでした。