メンバ変数、コンストラクタ、メンバメソッドを使用し位置表示する
練習問題10の7
位置を表すクラスPositionを作成し、各操作ができるプログラムを作成する。
クラス:Position
メンバ変数:
private double x 東西の位置(東:プラス,西:マイナス)
private double y 南北の位置(北:プラス,南:マイナス)
コンストラクタ:
public Position() 初期位置をx=0, y=0にしてインスタンス生成
public Position(double xs, double ys) 初期位置を指定してインスタンス生成
メンバメソッド:
move 機能:移動距離と移動方向を引数として受け取り移動処理を行う
display 機能:現在の位置を表示する
実行画面
最初の地点を設定する(1), 設定しない(他)>1
東西の位置[km](東:プラス, 西:マイナス)を入力して下さい > 2.5
南北の位置[km](北:プラス, 南:マイナス)を入力して下さい > -3
操作を入力して下さい
移動(1), 現在位置表示(2), 終了(他)>2
現在の位置は、東へ2.5km、南へ3.0kmの地点です。
操作を入力して下さい
移動(1), 現在位置表示(2), 終了(他)>1
移動する方向を入力して下さい(東(1), 西(2), 南(3), 北(他) > 4
移動する距離を入力して下さい > 4.5
北へ4.5km進みました。
操作を入力して下さい
移動(1), 現在位置表示(2), 終了(他)>1
移動する方向を入力して下さい(東(1), 西(2), 南(3), 北(他) > 2
移動する距離を入力して下さい > 3
西へ3.0km進みました。
操作を入力して下さい
移動(1), 現在位置表示(2), 終了(他)>2
現在の位置は、西へ0.5km、北へ1.5kmの地点です。
操作を入力して下さい
移動(1), 現在位置表示(2), 終了(他)>0
解答例
private double x;
private double y;
public Position() {
x = 0.0;
y = 0.0;
}
public Position(double xs, double ys) {
x = xs;
y = ys;
}
public void move(double distance, int direction) {
switch(direction) {
case 1:
x += distance;
System.out.println("東へ" + distance + "km進みました。");
break;
case 2:
x -= distance;
System.out.println("西へ" + distance + "km進みました。");
break;
case 3:
y -= distance;
System.out.println("南へ" + distance + "km進みました。");
break;
default:
y += distance;
System.out.println("北へ" + distance + "km進みました。");
break;
}
}
public void display() {
System.out.print("現在の位置は、");
if(x>=0) {
System.out.print("東へ" + x + "km、");
}
else {
System.out.print("西へ" + (-x) + "km、");
}
if(y>=0) {
System.out.print("北へ" + y + "km");
}
else {
System.out.print("南へ" + (-y) + "km");
}
System.out.println("の地点です。");
}
}
public class ren10_7{
public static void main(String[] args) throws IOException {
BufferedReader br
= new BufferedReader( new InputStreamReader(System.in) );
Position pos;
System.out.println("最初の地点について選択して下さい");
System.out.print("最初の地点を設定する(1), 設定しない(他)>");
switch(Integer.parseInt(br.readLine())) {
case 1:
System.out.print("東西の位置[km](東:プラス, 西:マイナス)を入力して下さい > ");
double x = Double.parseDouble(br.readLine());
System.out.print("南北の位置[km](北:プラス, 南:マイナス)を入力して下さい > ");
double y = Double.parseDouble(br.readLine());
pos = new Position(x, y);
break;
default:
pos = new Position();
break;
}
System.out.println("操作を入力して下さい");
System.out.print("移動(1), 現在位置表示(2), 終了(他)>");
int n = Integer.parseInt(br.readLine());
int dir;
double dist;
while( 1 <= n && n <= 2) {
switch( n ) {
case 1:
System.out.print("移動する方向を入力して下さい(東(1), 西(2), 南(3), 北(他) > ");
dir = Integer.parseInt(br.readLine());
System.out.print("移動する距離を入力して下さい > ");
dist = Double.parseDouble(br.readLine());
pos.move(dist, dir);
break;
case 2:
pos.display();
break;
}
System.out.println();
System.out.println("操作を入力して下さい");
System.out.print("移動(1), 現在位置表示(2), 終了(他)>");
n = Integer.parseInt(br.readLine());
}
}
}
メンバ変数、コンストラクタ、メンバメソッドを使用し位置表示する関連ページ
- 連続して表示するメソッドを作る for文使用
- メソッドを使用して、横幅高さの長方形を表示する
- 2つの整数の差を計算して表示する メソッド
- 3つの整数の最小値を返す メソッド
- 整数nの階乗を計算して表示する メソッド
- 整数の2乗を表示する メソッド
- 2乗と4乗を表示するメソッド
- 4つの整数の中で最小値を表示するメソッド
- 配列を宣言し、整数逆順に表示する メソッド
- クラスを作成し、インスタンスに記憶し表示する
- クラスにメソッドを使用する
- クラスを作成し、インスタンスに記憶しメソッドを介して表示する
- クラスを作成し、メインメソッドを実行し表示を確認する
- コンストラクタやメソッドで時計表示
- コンストラクタやメソッドで時計表示し何秒か時間を進めたり戻す
- メンバ変数、コンストラクタ、メンバメソッドを使用し枚数表示する
- メンバ変数、コンストラクタ、メンバメソッドを使用し水量表示する
- メンバ変数、コンストラクタ、メンバメソッドを使用し財布の中身残量表示する
- インスタンス配列を使用して、集計表示を行う コンストラクタ
- フィールド変数がprivateで直接参照できないときに返すメソッド
- インスタンスを2個生成し操作する
- privateを使用して、操作する
- インスタンスを複数生成し、操作する