• ベストアンサー

FOR文の使用方法について (変数のセット)jsp

こんにちは。JSPでfor文の添え字(i)を変数の添え字に反映したいと思っております。 <% for(int i=1;i<8;i++){  ResultSet rs_q(i)_ans_yes = qs_cnt.q(i)_ans_yes();  ResultSet rs_q(i)_ans_no = qs_cnt.q(i)_ans_no(); } %> rs_q1_ans_no = qs_cnt.q(1) rs_q2_ans_no = qs_cnt.q(1) rs_q3_ans_no = qs_cnt.q(1) rs_q4_ans_no = qs_cnt.q(1) とq(i)のように添え字を代入したいのですがいきずまっております。 どなたかご教示いただけないでしょうか?

  • Java
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • lawson
  • ベストアンサー率44% (29/65)
回答No.2

変数名が固定だからという話でしょうか? 代入式ではなく、 setメソッドが用意されていて、それが使えるのであれば 動的メソッドの呼び出しにて対応できます。 なぜなら、動的メソッドの呼び出しの手法では、 メソッドの名前は動的にString型を用意して 引数として、与えるからです。 添え字, 配列名[添え字] の二つの引数を取るメソッドを定義して setXXXN()を動的に呼び出します。 ちなみにN は 1~8になるでしょう。 そこの呼び出し部分自体を ループで回して、8回呼び出してみるのもいいでしょう 詳しくは私自身が以前質問した ↓を参照して、真似して改造してみてください。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=838724 ちなみに、動的メソッドの対象となるメソッドは publicでなければなりません。 この場合はsetメソッドなので、 たぶんpublicなので、問題ないでしょうが。 以上

sys_com
質問者

補足

ご返事遅れまして申し訳ございませんでした。 ご指摘いただいたURLを参考に再度チャレンジしたいと思います。

その他の回答 (1)

  • chi-kon
  • ベストアンサー率43% (58/132)
回答No.1

同じ形のものを何度も使うのであれば 普通に配列などを使うのではだめなのでしょうか? 変数に使われている数字と配列の添え意は 見た目が同じなだけであってモノとしては別物です。 どうしてもこの設計で行わなければいけない理由があるのであれば reflectionを使えば可能ですが、 あまりお勧めできません。 結局フィールドは先にハードコーディングしておかなければならないし。 変数の添え字が上限が決まっているならば 可能でしょうが。

sys_com
質問者

補足

ご連絡が遅れまして申しわけありませんでした。 特に設計などの制約はございません。 配列を使って再度チャレンジしたいと思います。

関連するQ&A

  • for文にて +=の意味がわかりません。

    最近ActionScriptの勉強を始めたのですが、for文にてわからない部分があります。内容は、 1から1000までの足し算を繰り返し行い、その合計値をmessage_txtに代入するアクションスクリプトを書きたい 最終的に答えは以下らしいのですが、ans+= i; という文の中で、「+=」がどういう働きをしているのかがよくわかりません。 どなたかわかりやすく解説していただけませんでしょうか? var ans = 0; for (var i = 1; i<=1000; i++) { ans += i; } message_txt.text = ans;

    • ベストアンサー
    • Flash
  • javaのfor文

    nの値の和を求めるのはこれ以外に書き方はありますか? import java.util.*; class SampleGoo{ public static void main(String args[]){ Scanner std = new Scanner(System.in); System.out.print("整数値:");int n = std.nextInt(); int ans = 0; for (int i = 1;i <= n;i++){ ans = ans + i; } System.out.println(Integer.toString(ans)); } }

  • javaのfor文

    nの値の和を求めるのはこれ以外に書き方はありますか? import java.util.*; class SampleGoo{ public static void main(String args[]){ Scanner std = new Scanner(System.in); System.out.print(\"整数値:\");int n = std.nextInt(); int ans = 0; for (int i = 1;i <= n;i++){ ans = ans + i; } System.out.println(Integer.toString(ans)); } }

  • JSPのwhile文で1~5の☆でひし形を作りたい

    JSPのwhile文でひし形を作りたいのですが 半分しかできません。数値が固定になってしまいます。 どうやったらひし形ができますか?教えてください。 // 上り for (int i = 0; i < 5; i++) { for (int j = 0; j <= i; j++) { out.print("*"); } out.print("<BR>"); } // 下り for (int i = 0; i < 5; i++) { for (int j = 4; j >= i; j--) { out.print("*"); } out.print("<BR>"); }

  • for文

    for文なのですが、 scanfで得た、 iを for文のi--で、一づつへらしてますが、 0でfor文がおわりますが 0で終わりの記述がない気がするんですが、 どうしてでしょか? int main(void) {    int i;    printf("正の整数を入力してください。\n");    scanf("%d",&i);    for( ; i ; i--)    printf("qが入力されました。\n");    return 0; }

  • for文を使用して値を代入したいです。教えてください。

    5桁の10進数文字を16進数に変換するコードを作成したのですが、コード上の「商と余りを配列に代入」の箇所をfor文で作成したいのですが、うまくいかず1文1文のコードになってしまいました。「商と余りを配列に代入」する箇所に、当てはまるfor文のコードの所だけ、書き換えたいので教えていただけないでしょうか? //10進数文字を数字の16進数で表示// #include "stdafx.h" #define HEX 5 //「function」:入力文字された文字の処理// char ToInt( char cInt) { int mal=0; switch (cInt){ case '0': mal=0; break; case '1': mal=1; break; case '2': mal=2; break; case '3': mal=3; break; case '4': mal=4; break; case '5': mal=5; break; case '6': mal=6; break; case '7': mal=7; break; case '8': mal=8; break; case '9': mal=9; break; } return (mal); } //「function」:入力文字された文字数// char HexInt( char eInt) { char mul=0; switch (eInt){ case 0: mul='0'; break; case 1: mul='1'; break; case 2: mul='2'; break; case 3: mul='3'; break; case 4: mul='4'; break; case 5: mul='5'; break; case 6: mul='6'; break; case 7: mul='7'; break; case 8: mul='8'; break; case 9: mul='9'; break; case 10: mul='A'; break; case 11: mul='B'; break; case 12: mul='C'; break; case 13: mul='D'; break; case 14: mul='E'; break; case 15: mul='F'; break; } return (mul); } //「function」:桁数の計算(10×指数を計算)// int HexAcc( int n ) { int i; int ans=1; for( i=0; i<n; i++ ){ ans *= 10; } return (ans); } int _tmain(int argc, _TCHAR* argv[]) { int i=0,n=0,j=0,k=0,s=0,m=0; char decimal[255], ditto[255],sub[255],temp[255],flip[255],na[255]; int u=0,odd=0; int a=0,b=0; int sam1=0,sam2=0,sam3=0,sam4=0,sam5=0; int mas1=0,mas2=0,mas3=0,mas4=0,mas5=0; if( argc > 1 ){ decimal[s] = argv[1][i]; } else{ printf("10進数を入力してください。\n"); return 1; } for( k=0; k<=HEX; k++ ){ sub[k] = '0'; } for( k=0; k<=HEX; k++ ){ temp[k] = '0'; } for( k=0; k<=HEX; k++ ){ flip[k] = '0'; } for( k=0; k<=HEX; k++ ){ na[k] = '0'; } for( i=0; argv[1][i] != '\0'; i++ ){ decimal[i] = argv[1][i]; } decimal[i] = '\0'; for( i=0; decimal[i] != '\0'; i++ ){ if( decimal[i] != ' ' ){ ditto[n] = decimal[i]; n++; } } ditto[n]='\0'; for( n=0; ditto[n] != '\0'; n++ ){ if(( ditto[n] == '0' ) || ( ditto[n] == '1' ) || ( ditto[n] == '2' ) || ( ditto[n] == '3' ) || ( ditto[n] == '4' ) || ( ditto[n] == '5' ) || ( ditto[n] == '6' ) || ( ditto[n] == '7' ) || ( ditto[n] == '8' ) || ( ditto[n] == '9' )){ }else{ printf("エラー\n 10進数を入力してください。\n"); return 0; } } for( n=0; ditto[n] != '\0'; n++ ){ m = m + 1 ; } if( m <= HEX ){ }else{ printf("エラー\n入力文字数は、%d文字以内にしてください。\n",HEX); return 0; } for( n=0; ditto[n] != '\0'; n++){ sub[HEX-m+n] = ditto[n]; } sub[HEX] = '\0'; int ans=0, add=0; for( n=0; sub[n] != '\0'; n++){ ans = ToInt(sub[n]); add += ans * HexAcc(HEX-n-1); } //商と余りを配列に代入// sam1 = add / 16; mas1 = add - sam1 *16; temp[0] = mas1; sam2 = sam1 / 16; mas2 = sam1 - sam2 * 16; temp[1] = mas2; sam3 = sam2 / 16; mas3 = sam2 - sam3 * 16; temp[2] = mas3; sam4 = sam3 / 16; mas4 = sam3 - sam4 * 16; temp[3] = mas4; sam5 = sam4 / 16; mas5 = sam4 - sam5 * 16; temp[4] = mas5; //商と余りを配列に代入・ここまでfor文に変更したいです// temp[5]='\0'; for( a=0; a<2; a++ ){ b = temp[a]; temp[a] = temp[4-a]; temp[4-a] = b; } temp[n]='\0'; for( n=0; sub[n] != '\0'; n++){ na[n] = HexInt(temp[n]); } na[5]='\0'; printf("\n10進数文字を16進数で変換した値は %s \n",na); }

  • Servlet+Beans+JSPでのページング方法

    Win2000+j2sdk1.4.2でEclipse2.1を使用して、 開発を行っております。 商品明細の画面を作っているんですが、 1ページ30明細にしたいと思っています。 つまり、検索サイトの検索結果画面のように、 30明細表示したら、次ページ+前ページの リンクボタンを表示して、そのリンクボタンを押されたら、 同じJSP内で次ページの明細を表示するようにしたいんです。 いわゆるページング処理ってやつです。 で、今明細を表示する際には、BeansでDBを読み込んで、 そのRecordsetをJSPに渡して、getObject()を使用して、 明細表示しています。 ResultSet rs = (ResultSet)request.getAttribute("rs");  while(rs.next()){   out.println("<tr>");    for(int i=0;i<columns.length;i++){ out.println("<td>"+rs.getObject(i+1));    }  } 上のような感じで明細書いてます。 ASPの場合だとページ処理用にRecordsetオブジェクトにプロパティがあったので、割と簡単だったのですが、 JAVAの場合getObject(x)のxの数値をうまく変更してページ処理をするのがベターな方法なんでしょうか? それでもできないわけじゃないんですが…めんどくさいし…バグ増えそうだし… 質問内容をまとめると、 1.JAVAのWebページ処理はどうやってやるのか?または、やっていますか? 2.RecordSetオブジェクトにページ処理用のプロパティ等あるのか? という2つになります。 そもそも、RecordSetオブジェクトをまんま使って、明細書かないよっ!てなツッコミでもいいです。 回答お待ちしてます。よろしくお願いします。

    • ベストアンサー
    • Java
  • JSP内でfor文を使用し、出力結果にそれぞれ違う値を入れ、サーブレットで受け取りたいです。分かる方教えてください。

    JSP内でfor文を使用し、出力された値それぞれに違う値を設定し、それをサーブレットで受け取りたいのですが? 分かる方教えてください。 <%Integer N = 0; Integer I = (Integer)session.getAttribute("I"); %> <%for(int i=0; i<list.size(); i++){ ListBeanServlet lBean = (ListBeanServlet) list.get(i);N++;%> <a href="/myHtml/ResultS" ><font size="3" color="white"> <c:set var="param" /><%=N%>/<%=lBean.getLMusic()></font></a><br> <%session.setAttribute("param",N); } %> この様に変数Nに値をいれ、N++で各結果に数字符合をして、 出力結果<a href>ひとつひとつに値を設定しようと思うのですが。 Nの値がやはりfor文の最期の値になってしまい。 出力結果の値が全て同じになってしまいます。 (1)List.sizeは不定数です。 (2)form/hiddenを使ってみたものの、変数の値がnullになってしまう。 <% for(int i=I-1; i<list.size(); i++){ ListBeanServlet lBean = (ListBeanServlet) urList.get(i);%> <param name="FileName" value="<%=lBean.getUrl()%>"> <%} %> 同じJSP内の違う場所にサーブレットを使用し送り、 クリックした<a herf>によって違う設定をしたいのですが? 分かる方教えてください。

  • 検索して持ってきた数値をfor文に使いたい

    urizakaです。 現在、ある組織に所属した人間の数と名前を調べ、その所属した人間がある業務に該当しているかどうかを調べるという処理を作っています。その際に調べてきた数理まで処理を行うという処理を作るためにfor文を使おうと思っているのですが、 調べてきた数値というのは、 String c_code_staff = new String(); public void searchFlag1(){ int num; String sf1Stmt = "select count(*) from m_staff where code_org='" + s_code_org +"'"; try{ open(); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(sf1Stmt); while (rs.next()){ c_code_staff = rs.getString(1); } rs.close(); stmt.close(); close(); } catch(SQLException ex){ System.out.println("searchFlag1のDBエラー : " + ex); System.out.println("searchFlag1のSQL" + sf1Stmt); } catch(java.lang.Exception ex){ System.out.println("searchFlag1のDB ErrorB : " + ex); } } という処理を使うため、STRING形になっているので、このままではfor文には 代入できない状態です。c_code_staffをintで宣言という手も考えたのですが、intでは宣言できなかったため、駄目でした…  すみませんが、javaでStringをintに変換する方法についてご存知の方宜しくお願いします。

    • ベストアンサー
    • Java
  • C#のfor文

    質問内容に合う丁度いいカテゴリが見つからなかったのでここに投稿 しました。相応しくなければご勘弁ください。 C#を勉強中です。 http://ufcpp.net/study/csharp/sp_namespace.html を読んでいたのですが、理解できないところがあったので質問します。 「エイリアス」の「サンプル」のところのコードについてです。 ----------------------------------------------------- public static double Sin(double x) { double xx = -x*x; double fact = 1; double sin = x; for(int i=0; i<100; ++i) { fact *= i; ++i; fact *= i; ++i; x *= xx; sin += x / fact; } return sin; }//Sin ----------------------------------------------------- for文の1回めのループの最終行ではfactの値が0になってランタイム エラーになると思うのですが、実際は6になるのでしょうか? (プログラムを動かして確認する方法を学ぼうとしている途中なので こういう聞き方になっています) 0になると考えた理由は以下。 ----------------------------------------------------- fact *= i; ++i; fact *= i; ++i; ----------------------------------------------------- の最初の「;」の前ではiの値が0なので1*0=0がfactの値になり、 2番めの「;」の前ではiの値が1になり、 3番目の「;」の前では0*1=0がfactの値になり、 4番目の「;」の前ではiが2になるのではないのでしょうか? for文の1回目のループが終わった直後に ----------------------------------------------------- for(int i=0; i<100; ++i) ----------------------------------------------------- での「++i」によってiは3になるのですよね? factが6になっているには、 ----------------------------------------------------- fact *= i; ++i; fact *= i; ++i; ----------------------------------------------------- の最初のfactの代入文でiの値が2、次のfactの代入文でiの値が3 になっていなければいけないように思うのですが、上の考えと合わ ないためこれ以上読み進めることができなくなりました。 たぶん、初心者ゆえの頓珍漢な質問かと思いますが、ご指導よろしく お願いします。