/*問題1:ChildAP01.java をコンパイルしたときエラーとなるのはどのコードか確かめなさい.ただし,エラーとなるコードは5 カ所ある.また,Base02.java およびChildAP01.java をBase03.java およびChildAP03.java と名前をつけ直した上で,正しく動作するよう書き直しなさい.
ChildAP01.java(これはコンパイルエラーが出ます)*/
package p052;
import p051.*;
class ChildAP01 extends Base02{
//コンストラクタ
ChildAP01(){
this.w = 111;
this.x = 222;
this.y = 333;
this.z = 444;
}
public static void main
(String [] args
){ ChildAP01 cs = new ChildAP01();
System.
out.
println("w = "+cs.
w); System.
out.
println("x = "+cs.
x); System.
out.
println("z = "+cs.
y); System.
out.
println("z = "+cs.
z); }
}
//---------------------------------------
//Base02.java
package p051;
public class Base02{
public int w;
protected int x;
int y;
private int z;
//setter メソッド(private 変数z に値を他クラスから代入する)
public void setZvalue(int z){
this.z = z;
}
//(private 変数z の値を他クラスから取りだす)getter メソッド
public int getZvalue(){
return this.z;
}
//コンストラクタ
Base02( ){
this.w = 10;
this.x = 20;
this.y = 30;
this.z = 40;
}
}
/*----------------------------------------
問題2
1. BallPropagator.java に,コンストラクタを書き加えなさい.
2. BallPropPanel.java にコードを加筆して,ボールに色をつけなさい.
3. BallPropPanel.java にコードを加筆して,反射するボールを2 つに増やしなさい.
4. BallPropagator.java に,ボールの速度を更新するためのメソッドを書き加えなさい.ただ
し,加速度はどちらのボールもax = 0,ay = 9.8 とせよ.
5. BallPropagator.java を書き換え,ボールが壁に非弾性衝突するようにせよ.ただし,反発
係数
= 0.8(gamma) を用いること.
6. BallPropagator クラスのインスタンスフィールドr, x, y, vx, vy, ax, ay にはアクセス
修飾子が付いていない.ここにprivate 修飾子を加えた上で,プログラムが動作するよう
BallPropagator.java およびBallPropPanel.java を書き換えなさい.(アクセサメソッドを
追加する.)
----
BallPropPanel.java*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//描画パネルのサイズ
private int xPanelSize;
private int yPanelSize;
//BallPropagator クラスのインスタンス
BallPropagator b1;
//ボールの色
//コンストラクタ
BallPropPanel(int xPanelSize, int yPanelSize){
//描画パネルのサイズ
this.xPanelSize = xPanelSize;
this.yPanelSize = yPanelSize;
//BallPropagator クラスのインスタンスの生成(ボールの生成)
//ボールb1 の初期状態(ボールの半径,位置,速度,加速度)
b1 = new BallPropagator(10, 100, 100, 100, -50, 0, 0);
/////////////////////////////////////////////
//ここでボールの色を決める(RGB カラーの生成)
/////////////////////////////////////////////
}
//イベント(タイマーによる呼び出し)が発生したときの処理
//ボールb1 の位置の更新
b1.xUpdate();
b1.yUpdate();
//ボールb1 の速度の更新
b1.vxUpdate();
b1.vyUpdate();
// 再描画
repaint();
}
// 描画するときの処理
super.paintComponent(g);
g.fillOval((int)(b1.x-b1.r), (int)(b1.y-b1.r),
(int)(2*b1.r), (int)(2*b1.r));
}
// メイン・メソッド
public static void main
(String[] args
) { //微小時間間隔
BallPropagator.dt=0.1;
// フレームを生成する
// パネルを生成する
BallPropPanel panel = new BallPropPanel(500,400);
panel.
setBackground(Color.
white);panel.setPreferredSize(
new Dimension(panel.
xPanelSize, panel.
yPanelSize)); //ボールの動く範囲を決定する(境界条件)
BallPropagator.xmin = 0;
BallPropagator.xmax = panel.xPanelSize;
BallPropagator.ymin = 0;
BallPropagator.ymax = panel.yPanelSize;BallPropagator.java
public class BallPropagator{
public static double dt;//プロパゲータの微小時間間隔
public static int xmin; //境界座標
public static int xmax;
public static int ymin;
public static int ymax;
public static final double gamma = 0.8;//反発係数
double r; //ボールの半径
double x, y; //ボールの位置(中心座標)
double vx, vy;//ボールの速度
double ax, ay;//ボールの加速度
///////////////////////////////////////////////////////////
//
// ここにBallPropagator クラスのコンストラクタを書きなさい
// ( r, x, y, vx, vy, ax, ay を初期化する)
//
///////////////////////////////////////////////////////////
//x 軸方向の位置の更新
public void xUpdate() {
this.x = this.x + this.vx * dt;
//x 方向の反射(cf. 反発係数)
if(this.x-this.r < (double)xmin ){
this.vx *= -1;
this.x = (double)xmin+this.r;
}else if((double)xmax < this.x+this.r ){
this.vx *= -1;
this.x = (double)xmax-this.r;
}
}
// フレームを設定する
frame.add(panel);
frame.pack();
frame.setTitle("反射するボール");
frame.
setDefaultCloseOperation(JFrame.
EXIT_ON_CLOSE);frame.setResizable(false);
frame.setVisible(true);
// イベントを定期的に発生させるためのタイマー
timer.start();
}
}
/*------------------------------
BallPropagator.java*/
public class BallPropagator{
public static double dt;//プロパゲータの微小時間間隔
public static int xmin; //境界座標
public static int xmax;
public static int ymin;
public static int ymax;
public static final double gamma = 0.8;//反発係数
double r; //ボールの半径
double x, y; //ボールの位置(中心座標)
double vx, vy;//ボールの速度
double ax, ay;//ボールの加速度
///////////////////////////////////////////////////////////
//
// ここにBallPropagator クラスのコンストラクタを書きなさい
// ( r, x, y, vx, vy, ax, ay を初期化する)
//
///////////////////////////////////////////////////////////
//x 軸方向の位置の更新
public void xUpdate() {
this.x = this.x + this.vx * dt;
//x 方向の反射(cf. 反発係数)
if(this.x-this.r < (double)xmin ){
this.vx *= -1;
this.x = (double)xmin+this.r;
}else if((double)xmax < this.x+this.r ){
this.vx *= -1;
this.x = (double)xmax-this.r;
}
}
//y 軸方向の位置の更新
public void yUpdate() {
this.y = this.y + this.vy * dt;
//y 方向の反射(cf. 反発係数)
if(this.y-this.r < (double)ymin ){
this.vy *= -1;
this.y = (double)ymin+this.r;
}else if((double)ymax < this.y+this.r ){
this.vy *= -1;
this.y = (double)ymax-this.r;
}
}
///////////////////////////////////////////////////////////
//
// ここにx 軸方向の速度を更新するためのメソッドを書きなさい
//
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
//
// ここにy 軸方向の速度を更新するためのメソッドを書きなさい
//
///////////////////////////////////////////////////////////
}