- PR -

ループ数だけ変数を生成

投稿者投稿内容
soesoe
会議室デビュー日: 2003/10/27
投稿数: 8
投稿日時: 2004-01-07 17:41
初歩的なことのような気がするのでが、調べてもうまく求める情報が出なかったのでご指導頂ければと思います。

件名の通りループ中にループ数だけ変数を宣言しようと思います。
ループ数はWEBからの入力数をとり、コーディング時は未確定数です。
たとえば下記のようなことをしたいです。

------------------------------------------------------

int web_inp = ??? // WEBからの入力数です

for(int i=0; i<web_inp; i++){
String user○ = null; // ○にループ数 = iを入れて宣言したいです
}

------------------------------------------------------

web_inpが10なら、nullのStringをuser0〜user9まで10個宣言する感じです。

ご指導よろしくお願い致します。
七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2004-01-07 17:47
考え方を変えたほうがいいです。
例えば、リストを作って値を保持するとか
動的配列とかでやったほうがいいでしょう
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2004-01-07 18:27
ほむらです。
もしもフォームデータを格納するだけなら、
Mapオブジェクトを利用するとか。。
(キー名 = 変数名 = HTML name属性 みたいな)
soesoe
会議室デビュー日: 2003/10/27
投稿数: 8
投稿日時: 2004-01-07 18:47
引用:

七味唐辛子さんの書き込み (2004-01-07 17:47) より:
考え方を変えたほうがいいです。
例えば、リストを作って値を保持するとか
動的配列とかでやったほうがいいでしょう


七味唐辛子さんお返事ありがとうございます。
今読み返してみると例が端折りすぎてしまったようです。申し訳ありません。

画面1から画面2へ遷移時に変数を渡し、画面2にて遷移データから処理後、画面1から渡された変数をそのまま保持し画面1にもどり同条件で再検索&表示するというものです。
画面2は渡された変数から処理&表示のみで入力はありません。

画面1にて変数
public String $UKU_01 〜 $UKU_05 (初期でnull)
が用意されています。
これは5個の検索入力フォームをそれぞれ対応するものです。
必須入力で無いため入力数は未定数です。
現在$uku_01〜$uku_05は入力が無いものはそのままnullで画面1から画面2へ渡しています。
入力があった場合は、入力数のみをリスト化して処理保持しています。

そこで3箇所入力があったとします。Vector uku_list に3つをリスト化します。
現在は下記の様に

for(int i=0; i<uku_list.size(); i++){
 if(i==0){ $UKU_01 = uku_list(i); }
 if(i==1){ $UKU_02 = uku_list(i); }
 if(i==2){ $UKU_03 = uku_list(i); }
 if(i==3){ $UKU_04 = uku_list(i); }
 if(i==4){ $UKU_05 = uku_list(i); }
}

こんな感じで馬鹿正直に書いてあります。
でももし変数が30個とかあったら・・・30行書くのは賢くないなぁと思ったのです(あり得る環境です)
それでループ中で変数名の指定にループ数が使えれば?と思ったしだいです。

一番の問題は受け渡しに配列が使えないという点です。その関係上どうしても、最初に宣言されている変数に格納する必要性があります。
永井和彦
ぬし
会議室デビュー日: 2002/07/03
投稿数: 276
お住まい・勤務地: 東京都
投稿日時: 2004-01-07 19:32
細かいロジックに関しては読んでなく、端の方へのツッコミですが……

引用:

一番の問題は受け渡しに配列が使えないという点です。その関係上どうしても、最初に宣言されている変数に格納する必要性があります。



オブジェクトをセッションに放り込むのは要件上不可能だったりするのでしょうか?<受け渡しに配列が使えない。
どうしても無理なら、一旦CSVみたいな形式に落とし込んでやれば、見かけの値の数は固定(というか1個)に出来そうな気がします。
#カンマがまずければ、適当な(十分に安全だと思われる)デリミタを作ってもいいと思いますが
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2004-01-08 00:48
String[] parameters = request.getParameterValues("param");

session.setAttribute("params", parameters);

これじゃまずいんですか?
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2004-01-08 00:53
配列使えないようですね。。。
はやとちってしまいました。

でしたら、List にいれているものを、わざわざ変数に入れずに
そのリストごと、requestオブジェクトにぶちこんで、各ページで振り回せばどうでしょう。
Listも配列もあまり変わらないと思いますが・・・

それか、必要分のフィールドを持つBeanをつくれば、もっとシンプルになるんじゃないですか?
XXXBean xx = XXXBean(list);
コンストラクタでリストを分解して、各フィールドに入れるのもいいと思います。

やりかたはいろいろあるので。。。

もう少し、詳しく要件や制約を書いていただければ、
HELPしやすいと思います。

ご参考に。

[ メッセージ編集済み 編集者: raystar 編集日時 2004-01-08 00:55 ]
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2004-01-08 07:56
リフレクション(Class#getField())を利用すればいけますよ(激しくお勧めしませんが)。

スキルアップ/キャリアアップ(JOB@IT)