• ベストアンサー

変数名

以下のような変数があります。 test01 test02 test03 . . . 01の数字部分を↓のような感じにはできないのでしょうか? for(i = 0; i < 10; i++){ if(test + i == 0){} }

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

  • ベストアンサー
回答No.2

変数への参照をHashMap等に格納すれば出来ますよ。 例えばwkというHashMapに格納した後、 int size = wk.size(); for(int i = 0; i < size; i++) {   if( Integer.parseInt((String)wk.get("test" + i)) == 0   {   } } こんな感じで。

mako-kwnsh
質問者

お礼

お返事ありがとうございます。 ソースまで書いていただきありがとうございます。 ちょっとやってみます。

その他の回答 (2)

  • dayowl
  • ベストアンサー率56% (84/148)
回答No.3

もうすでにNo.1、2で回答されていることですが、 ぱっと見た感じで、下記のように素直に配列でやったほうが良さそうな気もします。 int[] test= { 1, 2, 3, 4}; for(i = 0; i < 10; i++){ if(test[i] == 0){} .... } のような感じで。。。。 配列が嫌ならやはり#2さんの回答のように HashMap等と使うのと良いかもしれません。 私はときどきHashtable型を使います。 Hashtableは、辞書型のオブジェクトで key=valueの組み合わせを複数保持できます。 但し、keyもvalueもどちらもオブジェクトを使わなければならないので、少し面倒かもしれません。 (つまり値としてプリミティブ型を扱いたいときには一工夫必要になります) つまり#2さんの例とほとんど同じなんですが。。。 Hashtable ht = new Hashtable(); /* Hashtableの初期設定 */ /* putメソッドで、キーを追加する */ /* put(Object key, Object value) */ ht.put("test01", "1"); /* test01="1" の組み合わせを追加*/ ht.put("test02", "2"); /* test02="2" の組み合わせを追加*/ ht.put("test03", "3"); /* test03="3" の組み合わせを追加*/ /* Hashtableのキーを最初から最後まで順次読み出す */ for (int i = 0; i < ht.size(); i++) { String num = (new DecimalFormat("00")).format(i); /* 1を"01"に整形 */ String ht_value = (String)ht.get("test"+ num); /* 使い方 (Object)Hashtable.get(Object key) */ int value = Integer.parseInt(ht_value); /* String型からint型へ変換 */ if (value == 0) { } } ただ、この方法は、本当にどうしても我慢できなくて、必要で必要でもうどうしようもない、というような時に使ったほうが良いかと思います。 上記を見たらなんとなくわかると思いますが、余分な処理が多いですよね。 もし、ソースが分かりにくくなることを嫌うのなら、コメント文をきちんと入れておけば良いと思いますしね。

mako-kwnsh
質問者

お礼

お返事ありがとうございます。 確かに素直に配列にしたほうがいいと思ったのですが、 現在ソースの保守・拡張作業を行っていて 配列にしてしまうと結構ソースが変わってくるので それを防ぐために配列を使わない方法をさがしていました。

  • UKY
  • ベストアンサー率50% (604/1207)
回答No.1

出来ません。 配列を作ってそれぞれの要素を変数として使ってください。 (基本的に、変数の名前という情報はコンパイル時に失われます。従って実行時に変数の名前を元に変数にアクセスすることは不可能です。) なお、変数がローカル変数ではなくクラスのフィールドである場合、リフレクション機能を使って変数の名前を元に変数にアクセスすることも不可能ではありませんが、効率的な方法とはいえません。

mako-kwnsh
質問者

お礼

お返事ありがとうございます。 リフレクションの機能を少し調べてみます。

関連するQ&A