• ベストアンサー

オブジェクト名をforループ内で変更するには?

Java、Java3Dを最近始めたばかりのものです。 質問 Shape3D shape = new Shape3D(geometry,ap); 上記ような、“shape”、“ap”を forループ内で、“shape1, shape2, shape3, . . .”というように、オブジェクト名を変更していきたいのですが、どのように行ったらよいのでしょうか? 宜しくお願いいたします。

  • x-29a
  • お礼率50% (1/2)
  • Java
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • momozange
  • ベストアンサー率67% (21/31)
回答No.2

まず「オブジェクト名」ではなく「変数名」です。 変数名に依存したロジックはそもそも間違っていると思ってください。 0..nといった添え字に何らかの意味があるのであれば(画面と密に依存性がある、等) 前者の回答の通り、配列かコレクションAPIを使用します。 まだJavaにあまり慣れていないようであれば、配列でも構わないと思います。 オブジェクトの個数(配列の範囲)が確定しているのであればなおさらです。 Shape3D[] shapes = new Shape3D[n]; shapes[index] = new Shape3D(); しかし、最終的にはコレクションAPIを使用することを目標としたほうがよいでしょう。

x-29a
質問者

お礼

お返事ありがとうございます。 shape3Dの変数名を配列定義することで、プログラムの作成が進みました。 これから、まだまだ勉強していきたいと思います。 ありがとうございました。

その他の回答 (1)

  • meenie
  • ベストアンサー率44% (40/90)
回答No.1

格納するオブジェクト名(shape)を変更していきたいと感じたときは、 配列の利用を検討してください。 (例) Shape3Dを格納する配列 java.util.ArrayList<Shape3D> shapeList; オブジェクト名も情報として必要なら java.util.HashMap<String,Shape3D> shapeMap; 次に、引数(ap)を変更していきたいと感じたときは、 引数のオブジェクトを配列に格納し、それをループで回してみてください。 用途がはっきりしませんのであまり具体的なことは言えません。 参考までにどうぞ。

x-29a
質問者

補足

お早いお返事ありがとうございます。 用途としましては、10個程度ある空間物体(geometry)の表示を個別に ボタン設定で変化(POLYGON_LINE 又は POLYGON_FILL 又は setTransparency で 透明度を変えたり)させるプログラムを 作ろうとしています。 教えていただいたArrayListでのオブジェクト名の引渡し方ですが、 どのようにするとよろしいのでしょうか? 以下のようなプログラム構成を考えています。 素人質問ですみませんが、宜しくお願いいたします。 int i; ArrayList apList = new ArrayList(); ArrayList shapeList = new ArrayList(); for( i=0; i<=10; i++ ){ apList.add("ap"+i); shapeList.add("Shape"+i); } for( i=0; i<=10; i++ ){ Appearance の設定 Point3d で点を設定 QuadArray で geometry を生成 Shape3D shape = new Shape3D(geometry,ap); // ↑ここの記述が分かりません。 ↑   }

関連するQ&A

  • オブジェクト名

    複数のWinsockを使用したいです。 オブジェクト名Winsock1~Winsock6があるとします。 例えば Dim i As Integer Dim strWinsock As String For i = 1 to 6 strWinsock = Winsock & i //処理 Next 上記のようなループで文字列strWinsockを、オブジェクト名として使用することはできないのでしょうか? また、もし他の方法があるようでしたら、教えて下さい。

  • 特殊なfor文について

    SJC-P 問題集 問13の疑問より for文について教えてください。 一般的なfor文だと次の形だと思うのですが for(int i = 0; i < 5; i ++){ //5回ループする } Animal [] animals = { new Animal(), new Cow() }; for( Animal a : オブジェクト配列animals ){ a.saySomething(); } のような場合、このfor文は 「オブジェクト配列の中にanimalsがあるまでの間、ループする」という意味を指しているのでしょうか? for( クラス名 オブジェクト名 : オブジェクト配列) の一文にある「:」← の役割は何なのでしょうか?

    • ベストアンサー
    • Java
  • forループに慣れるには

    初めまして。 今資格を取ろうと思い独学でJavaを勉強してるんですが、 つまらない部分でつまずいています。 それは少々複雑なfor等のループです。 変数を追っていくうちにこんがらがってしまい、 変数の正しい値を見失ってしまいます。 例えば… Loop: for(int i = 0; i<5; i++) { for(int j =0; j<5; j++) { if(i==j) continue Loop; System.out.println("i = " +i+ "j = " +j); if(i > 3) break Loop; } } や、 int i,j; for(i = 0, j = 0; i<3;) { if(i++ == 2 || j++ == 2) break; } System.out.println(i); System.out.println(j); の様なループです。 試験範囲は大方勉強出来てるんですが まぬけな事にループがイマイチ理解出来てなくて(恥) 皆さんはどうやって慣れてこられましたか? つまらない質問ですが何か良いコツやアドバイスがあれば よろしくお願いします。

  • パッケージ管理に変更されたデータObjectのリカバリー方法

    今までパッケージ管理されていなかったデータオブジェクトをパッケージ管理するよう変更したのですが、クラス名が変更されたことにより旧データオブジェクトの復旧が行えなくなりました。 前データ) class Data implements Serializable { public Data(){} } (1)オブジェクトストリームとしてExport。 Data target = new Data(); java.io.FileOutputStream ostream = new java.io.FileOutputStream("C:\\test.data"); java.io.ObjectOutputStream p = new java.io.ObjectOutputStream(ostream); p.writeObject(target); p.flush(); ostream.close(); (2)Dataオブジェクトをパッケージ管理に変更 新データ) package com.corp.etc class Data implements Serializable { public Data(){} } (3)(1)でExportしたデータをImport java.io.FileInputStream istream = new java.io.FileInputStream("C:\\test.data"); java.io.ObjectInputStream p = new java.io.ObjectInputStream(istream); Object obj = p.readObject(); istream.close(); Data data = (Data)obj; (3)の実行結果) java.lang.ClassNotFoundException: Data クラス名が変わったので、当たり前の動きとは思うのですが、旧データを今までと同じようにインスタンス化するために何か良い方法はありませんでしょうか?

  • forループを使うと上書きされてしまう・・・・

    NetBeansを使ってJAVAでツールを作っているのですが、 ループ作業でうまくいかないところがあります。 内容は テキストフィールドで入力された項目を、 全て別の画面で表示するというものです。 テキストフィールドを20個設置して、item配列をgetText()で作って それをforループで上から順番に表示しようとしているのですが、 結果を表示すると最後の一つしか表示されません。 ループが回る度に上書きされて最後しか残らないのだと思うのですが 全部表示する方法はないでしょうか? ↓ String[] item = new String[20];  //配列にまとめてます item[0] = item1.getText(); item[1] = item2.getText(); item[2] = item3.getText(); item[3] = item4.getText();  ・  ・省略  ・ item[18] = item19.getText(); item[19] = item20.getText(); for (int i=0; i<21; i++)        //ループで上から20項目表示しようとしてます items.setText(item[i] + "\n"); どんなことでもいいので情報をもらえると助かります。

    • ベストアンサー
    • Java
  • 無限ループをわざと作って時計をつくりたい

    無限ループをわざと作って時計を作ろうと思っています。 while(true){ 処理 } とすると無限ループを作ることができると書いてありましたので private void btnRedActionPerformed(java.awt.event.ActionEvent evt) { while(true) { taOutput.setText(""); Date d = new Date(); taOutput.append(d +":" ); Color c = new Color(102,255,255); taOutput.setBackground(c); Font f = new Font(Font.SERIF, Font.ITALIC, 25); taOutput.setFont(f);  } } として実行してボタンを押すと処理が止まって固まってしまうのです。 出力画面にOutOfMemoryErrorと書いてあるのでそのへんの理由だと思うのですが。 ちなみに for (int i = 0; i<5; i++) { } でテストするとうまく動きます。 これを固まらせずにうまく無限ループを続けさせるにはどうしたらいいのでしょうか。

    • ベストアンサー
    • Java
  • オブジェクトを配列として扱いたい

    Java(オブジェクト指向)を始めて数日の者です。 LinkedListを利用し、インスタンス化したオブジェクトをListに入れて 扱えるようにしたいと考えています。 具体的には LinkedList<クラス名> array = new LinkedList<クラス名>(); クラス名 object1 = new クラス名(); -object1の処理- array.add(object1); -object1の処理- array.add(object1); -object1の処理- array.add(object1); このようにして、object1を配列で管理するイメージです。 object1の処理結果は、毎度変わっています。 しかしこれですと、最後のobject1の処理の内容がすべてのarray(i)に入ってしまいます。 要は、array(i)は全て、同じobject1を参照しているだけ。 object1の変更結果がarray(i)に入っていくというイメージでは無い、ということでしょうか? また、この他でインスタンス化したものを配列で管理できるような方法がございましたら、ご教授いただけると幸いです。m(_ _)m 動的に配列の要素数を変更(要素が追加)ができるようにしたいのです。

    • ベストアンサー
    • Java
  • Wordのオブジェクト等がずれる

    とても初歩的な質問かもしれませんが、よろしくお願いします。 オートシェープやテキストボックス等が多数配置されたWordファイルが届きましたが、 そのオートシェープやテキストボックスの書式や大きさを変更したりすると、 そこだけ変更したいのに、幾つものオートシェープやテキストボックスが激しく位置崩れを起こしてしまいます。 多分、オートシェープ等の書式設定の関係だと思うんですが、変更したいところだけを変更し、他の箇所は一切動かないようにする方法ってあるんでしょうか。 不思議なことに、動いてほしくないオブジェクトが移動してしまった後にCtrl+Zを押しても、変更した部分だけは元に戻るのに、飛び交った幾つものオブジェクトは元に戻りません。結構微調整した後に、この現象が起こり、元にも戻せず、困っています。 人からもらったWord文書でこういう目によく遭います(T.T)私だけでしょうか。 絶対にずれない方法があったら教えていただけませんか。 微調整する前にこうしたらいいよ!とか。。。。 ちなみに、Word2003を使っています。相手のバージョンはわからないです。 よろしくお願いします。

  • オブジェクトをたくさん作る

    今までC言語を使っていましたが,新しくJAVAを勉強中の学生です. 下記のウェブサイトを参考に勉強中です. http://www.javadrive.jp/start/about/index3.html このページにあるソースを少し拡張しようと思っています. 上記のページにあるソースだと, tv1とtv2のオブジェクトを生成することができています. たとえばこれをfor文でまわして, n個のtvオブジェクトを生成するにはどうすれば良いのでしょうか? どなたかご教授頂けましたら幸いです. よろしくお願いします.

    • ベストアンサー
    • Java
  • エクセル2003VBA ワークシートオブジェクト名でオブジェクトを取得する記述について

    いつも勉強させていただいております。 こちらの掲示版に以下の質問の回答がとても興味を引いたので その件について、更にご質問させていただきたいと思います。 http://oshiete1.goo.ne.jp/qa3595532.html ご回答では、シートのオブジェクト名の変更のやり方等が 回答されておられました。 で、シートオブジェクト名の変更については理解できたのですが、 このオブジェクト名を用いてそのオブジェクトをどのように取得すれ ばいよのか、コードの記述の仕方がわかりません。 VBE画面でシートの表示名が Test(Sheet1)とした場合、シートオブジェクトを取得するコードは どのように記述するのでしょうか。 宜しくお願いいたします。