class Rots{
double thetaX, thetaY, thetaZ;
}

public class DemoData{

Rots[] rots = new Rots[16];

public DemoData(){
for(int i=0; i<rots.length; i++) {
rots[i] = new Rots();
}
}

void changeTheta(int i, double dx, double dy){
rots[i].thetaX += dx;
rots[i].thetaY += dy;
System.out.println("rots[i].dx= "+rots[i].thetaX );
}

}

というプログラムがあります。他のファイルで
DemoData dd = new DemoData();
if(j<=16 && j>=0) dd.changeTheta(j, thetax, thetay);

と2回以上呼ぶと、rots[i].thetaX、rots[i].thetaY
の値が加算されずに、毎回渡されたままのdx、dy
の値がプリントされてしまいます。どうしてでしょうか?
もう一度助けてください。お願いします。

A 回答 (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
    • good
    • 0
この回答へのお礼

ありがとうございました。できました!!
そうですよね。にゅーしたらだめですよね。


サンプルまで書いていただいて、
本当に助かりました。

お礼日時:2001/01/09 10:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報

カテゴリ