- ベストアンサー
プログラムでの値の加算が正しく行われない問題について
- プログラムの中でDemoDataクラスのchangeThetaメソッドを呼び出す際に、2回以上呼ぶと値が正しく加算されない問題が起こります。
- 具体的には、rots[i].thetaXとrots[i].thetaYの値が加算されずに、渡されたままのdxとdyの値が表示されてしまいます。
- この問題の原因としては、DemoDataクラスのインスタンス変数であるrotsが16個の要素を持つ配列であり、changeThetaメソッド内でその要素を変更しようとしていることが考えられます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
まず加算されない理由ですが、DemoDataクラスがnewされる時に必ずRotsをnewするように書いていますよね? (Rots[] rots = new Rots[16];の部分です) これだとDemoData dd = new DemoData();するたびにRotsクラスも新たにnewされるため以前のRotsに 加算されるはずがありません。DemoData dd = new DemoData();を実行すればおにゅーのRotsが毎回 生成されてしまいますからね。 ただ加算させてSystem.out.printlnしたいだけならばDemoData dd = new DemoData();が2回以上呼ばれないように すれば大丈夫です。 足りない部分がありましたら補足していただけると幸いです。 【ちょこっとサンプル】 (加算されない例) public class Frame1 extends JFrame { JButton jButton1 = new JButton(); ----中略---- //ボタン押下時にDemoData生成&計算 void jButton1_actionPerformed(ActionEvent e) { DemoData dd = new DemoData(); dd.changeTheta(0, 1, 1); } } (コンソール出力結果:ボタン5回押下) rots[i].dx= 1.0 rots[i].dx= 1.0 rots[i].dx= 1.0 rots[i].dx= 1.0 rots[i].dx= 1.0 (加算される例) public class Frame1 extends JFrame { JButton jButton1 = new JButton(); //DemoDataインスタンス生成 DemoData dd = new DemoData(); ----中略---- //ボタン押下時に計算 void jButton1_actionPerformed(ActionEvent e) { dd.changeTheta(0, 1, 1); } } (コンソール出力結果:ボタン5回押下) rots[i].dx= 1.0 rots[i].dx= 2.0 rots[i].dx= 3.0 rots[i].dx= 4.0 rots[i].dx= 5.0
お礼
ありがとうございました。できました!! そうですよね。にゅーしたらだめですよね。 サンプルまで書いていただいて、 本当に助かりました。