タイムマシーンがあったら、過去と未来どちらに行く?

お世話になっています。

今うまくいかずに困っていることがありまして、
ご存知の方がいらっしゃいましたら、
ご回答いただけないでしょうか?

質問の内容は以下の通りです。

ArrayListにセットされているデータを
Bean配列にセットするにはどのようにしたら
よいのでしょうか?
自分では以下のようにしているのですが、
デバッグすると落ちてしまいます。


// Bean配列の生成
Bean[] bean = new Bean[arrayListList.size()];

// Iteratorにより要素を取得する
Iterator it = dataList.iterator();

// ヘッダー情報Bean配列の行番号
int i = 0;

// ArrayListのi行目のデータをBeanにキャストし、
// i行目のBean配列にセットする
while(it.hasNext()){
bean[i] = (Bean) dataList.get(i);
i++;
}


ちなみに、キャストしようとしているBeanには
int型の項目があるんですが、そういうのが原因で
落ちるのでしょうか?

ご存知の方がいらっしゃいましたら、ご教授ください。

A 回答 (2件)

こんにちは。


「落ちます」の表現は、他人にはわかりません。
例外が発生しているのであれば、その例外を特定して、情報として掲載してください。

Bean[] bean = new Bean[arrayListList.size()];
と、配列生成時は、arrayListListを利用し、そのあとは、dataListを利用しているのが、すごく気になります。これが原因ではないでしょうか?
それとも、dataListの要素として設定されている値が、Beanクラスオブジェクトではないのが原因だったりしませんでしょうか?
いずれにしても、どう「落ちている」のか、精確に書いていただかないと、、、です。

これは、直接的な話ではありませんが、コーディングに無駄を感じます。
while文でループする度に1増加する変数iを利用しているのならば、Iteratorを使わずに、
for (int i=0; i < dataList.size(); i++) {
 bean[i] = (Bean) dataList.get(i);
}
とした方が、コーディング量が減ります。

また、Listから配列へはtoArrayメソッドを使うともっとコーディング量が減ります。
Bean[] bean = new Bean[dataList.size()];
dataList.toArray(bean);
と言った感じでどうでしょう。

この回答への補足

早速のご回答ありがとうございます。


>「落ちます」の表現は、他人にはわかりません。
>例外が発生しているのであれば、その例外を特定し
>て、情報として掲載してください。

すみません。確かにおっしゃる通りですね。今後、
気をつけます。


>Bean[] bean = new Bean[arrayListList.size()];
>と、配列生成時は、arrayListListを利用し、そのあと>は、dataListを利用しているのが、すごく気になりま
>す。これが原因ではないでしょうか?

度々すみません。誤植です。arrayListListと
dataListは同じものとみなしてください。


>いずれにしても、どう「落ちている」のか、精確に
>書いていただかないと、、、です。

そうですね。失礼しました。実際のところは、
デバッグ中にExceptionが発生してしまいます。
どのExceptionかは忘れてしまい、しかも今は
確認できませんので、情報として掲載できません。
ごめんなさい。


>それとも、dataListの要素として設定されている値
>が、Beanクラスオブジェクトではないのが原因だった
>りしませんでしょうか?

う~ん、どういうことですか?知識が全然足りない
もので、おっしゃっていることが理解できないのです
けれど、dataListにセットしている値を、Beanに
セットするときに、Beanの項目にint型やdouble型の
ものがあるとダメということですか?よろしかったら
ご教授いただけませんでしょうか?


ソースについてもいろいろと適切なアドバイスを
頂まして、ホントにありがとうございます。

補足日時:2005/02/11 12:46
    • good
    • 0

 こんにちは。



while(it.hasNext()){
  bean[i] = (Bean) dataList.get(i);
  i++;
}

 ここのwhile文ですが、無限ループになってしまっていますよ。
 Iteratorを使うのでしたら、ちゃんとnext()メソッドで要素を取得しないと、hasNext()はいつまでたってもtrueを返します。

 出た例外もIndexOutOfBoundsExceptionだったはずです。

 Iteratorを使うのでしたら、こう↓

while (it.hasNext()) {
  bean[i] = (Bean)it.next();
}

 使わないのであれば、#1さんの言うとおり、

for (int i=0; i < dataList.size(); i++) {
  bean[i] = (Bean) dataList.get(i);
}

 こうすべきです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

言われてみれば、確かに無限ループになりますね。
全くもって気づきませんでした。

いろいろとご指導いただきありがとうございました。

これで解決できそうです。ホントに心から感謝
いたします。

お礼日時:2005/02/11 17:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報