オブジェクト指向基本問題。staticの扱い。
Q1
1.以下のように箱を表すクラスBoxを定義する。
■一般クラス:Box
<フィールド>
private String color 箱の色
private String shape 箱の形
private int num 箱の中のボールの数
private static int totalNumber すべての箱のボールの総数
<コンストラクタ>
public Box(String color,String shape,int num){
処理
}
<メソッド>
insertBalls
… 引数として渡された個数のボールを箱に入れる
removeBalls
… 引数として渡された個数のボールを箱から取り出す
個数が不足する場合はすべてのボールを取り出す
displayInfo
… 箱の色・形、ボールの数を表示する
static displayTotalNumber
… すべての箱のボールの総数を表示する
2.BoxAppクラスを作成し、「赤、円形、1」「青、四角、2」でBoxクラスのインスタンスを2つnewして以下の処理を実現せよ。
[実行例]
1. ボール投入 / 2. ボール取出 / 3. ボール総数表示 / 4. 終了>1 0---色:赤, 形:円形, 個数:1 1---色:青, 形:四角, 個数:2 ボールを投入する箱の番号を入力して下さい > 1 投入するボールの個数を入力して下さい > 2 2個のボールを入れました。 1. ボール投入 / 2. ボール取出 / 3. ボール総数表示 / 4. 終了>3 ボールの合計は5個です。 1. ボール投入 / 2. ボール取出 / 3. ボール総数表示 / 4. 終了>2 0---色:赤, 形:円形, 個数:1 1---色:青, 形:四角, 個数:4 ボールを取り出す箱の番号を入力して下さい > 0 取り出すボールの個数を入力して下さい > 2 1個のボールを取り出しました。 1. ボール投入 / 2. ボール取出 / 3. ボール総数表示 / 4. 終了>1 0---色:赤, 形:円形, 個数:0 1---色:青, 形:四角, 個数:4 ボールを投入する箱の番号を入力して下さい > 2 箱の番号の入力が誤っています。 1. ボール投入 / 2. ボール取出 / 3. ボール総数表示 / 4. 終了>4 アプリケーションを終了します。
Boxクラス
public class Box { private String color; private String shape; private int num; private static int totalNumber; public Box(String color,String shape,int num){ this.color=color; this.shape=shape; this.num=num; totalNumber+=num; } public void insertBalls(int num){ this.num+=num; totalNumber+=num; System.out.printf("%d個のボールを入れました。%n",num); } public void removeBalls(int num){ int n=this.num > num ? num:this.num; this.num-=n; totalNumber-=n; System.out.printf("%d個のボールを取り出しました。%n",n); } public void displayInfo(){ System.out.printf("色:%s, 形:%s, 個数:%d%n", this.color,this.shape,this.num); } public static void displayTotalNumber(){ System.out.printf("ボールの合計は%d個です。%n",Box.totalNumber); } }
アプリケーションクラス
●配列を使わない
import java.util.Scanner; public class BoxApp { public static void main(String[] args) { Scanner scan = new Scanner(System.in); Box box1 = new Box("赤", "円形", 1); Box box2 = new Box("青", "四角", 2); while (true) { System.out.print("1. ボール投入 / 2. ボール取出 / 3. ボール総数表示 / 4. 終了>"); int select = scan.nextInt(); if (select ==1 || select==2) { System.out.print("0---"); box1.displayInfo(); System.out.print("1---"); box2.displayInfo(); } switch (select) { case 1: System.out.print("ボールを投入する箱の番号を入力してください>"); int boxNumber = scan.nextInt(); if(!(boxNumber == 0 || boxNumber==1)){ System.out.println("箱の番号の入力が誤っています。"); }else{ System.out.print("投入するボールの個数を入力してください>"); int ballNum = scan.nextInt(); if (boxNumber == 0) { box1.insertBalls(ballNum); } else { box2.insertBalls(ballNum); } } break; case 2: System.out.print("ボールを取り出す箱の番号を入力してください>"); boxNumber = scan.nextInt(); if(!(boxNumber == 0 || boxNumber==1)){ System.out.println("箱の番号の入力が誤っています。"); }else{ System.out.print("取り出すボールの個数を入力してください>"); int ballNum = scan.nextInt(); if (boxNumber == 0) { box1.removeBalls(ballNum); } else { box2.removeBalls(ballNum); } } break; case 3: Box.displayTotalNumber(); break; default: System.out.println("アプリケーションを終了します。"); scan.close(); return; } } } }
●配列を使う
import java.util.Scanner; public class BoxApp2 { private static Box[] boxes = { new Box("赤", "円形", 1), new Box("青", "四角", 2) }; public static void main(String[] args) { Scanner scan = new Scanner(System.in); while (true) { System.out.print("1. ボール投入 / 2. ボール取出 / 3. ボール総数表示 / 4. 終了>"); int select = scan.nextInt(); switch (select) { case 1: displayInfo(); System.out.print("ボールを投入する箱の番号を入力して下さい >"); int index = scan.nextInt(); if (index < 0 || index >= boxes.length) { System.out.println("箱の番号の入力が誤っています。"); continue; } System.out.print("投入するボールの個数を入力して下さい >"); int num = scan.nextInt(); boxes[index].insertBalls(num); break; case 2: displayInfo(); System.out.print("ボールを取り出す箱の番号を入力して下さい >"); index = scan.nextInt(); if (index < 0 || index >= boxes.length) { System.out.println("箱の番号の入力が誤っています。"); continue; } System.out.print("取り出すボールの個数を入力して下さい >"); num = scan.nextInt(); boxes[index].removeBalls(num); break; case 3: Box.displayTotalNumber(); break; case 4: System.out.println("アプリケーションを終了します。"); scan.close(); return; } } } public static void displayInfo() { for (int i = 0; i < boxes.length; i++) { System.out.print(i + "---"); boxes[i].displayInfo(); } } }
コメント