オブジェクト指向(基本5)

Java

お題

クラスの作り方とインスタンスの作り方を学ぼう。アクセス修飾子をつけて適切なカプセル化を行おう。

手順

◯新規クラスCashBoxMain.javaを作成する。内容は以下

public class CashBoxMain {

	public static void main(String[] args) {
		

	}

}

◯CashBoxMainクラスの下にCashクラスを作成する。記述は以下

public class CashBoxMain {

	public static void main(String[] args) {
		

	}

}
class CashBox{
	
}

以下はCashクラスに記述していくこと

◯フィールド変数
private String color
private int amount=0

◯コンストラクタ
String colorを引数として受け取ってフィールドにセットするものを作成する。
この際、コンストラクタ内でsetterを用いること

◯メソッド(setter&getter)

  • colorフィールドのsetter
    • nullだった場合にはIllegalArgumentException(“色がnullです。処理を中断”)を発生させる
public void setColor(String color) {
		if(color == null) {
			throw new IllegalArgumentException("色がnullです。処理を中断");
		}
		this.color=color;
	}
  • colorフィールドのgetter
    • ルール通りのもの
  • amountフィールドのsetter
    • 負の値が入ってきた場合にはIllegalArgumentException(“値が不正です。処理を中断”)を発生させる
  • amountフィールドのgetter
    • ルール通りのもの

◯メソッド

  • public void saveMoney(int money)
    • 引数で入ってきた金額をmoneyをamountに加算する
    • もし引数が負の値だった場合。[無効な値です]と出力する
  • public void withDraw(int money)
    • 引数で入ってきた金額をamountから減算する
    • 引数がamount以上だった場合すべてを引き出す
    • 引数が負の値だった場合[無効な値です]と出力する
  • public void displayAmount()
    • 残高を以下のフォーマットで出力する
赤の貯金箱:残高---2300円

CashBoxMainの作成

◯以下の実行例になるように処理を作成する

貯金箱の色を入力>>赤
1:貯金する 2:引き出す 3:情報をみる 4:終了>>1
金額を入力>>100
100円貯金した!
赤の貯金箱:残高---100円
1:貯金する 2:引き出す 3:情報をみる 4:終了>>2
金額を入力>>50
50円引き出した!
赤の貯金箱:残高---50円
1:貯金する 2:引き出す 3:情報をみる 4:終了>>3
赤の貯金箱:残高---50円
1:貯金する 2:引き出す 3:情報をみる 4:終了>>1
金額を入力>>-100
無効な値です
1:貯金する 2:引き出す 3:情報をみる 4:終了>>1
金額を入力>>1000
1000円貯金した!
赤の貯金箱:残高---1050円
1:貯金する 2:引き出す 3:情報をみる 4:終了>>2
金額を入力>>10000
1050円引き出した!
赤の貯金箱:残高---0円
1:貯金する 2:引き出す 3:情報をみる 4:終了>>4
アプリケーションを終了します。

解答例

import java.util.Scanner;

public class CashBoxMain {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("貯金箱の色を入力>>");
		String color = sc.next();
		CashBox cb = new CashBox(color);
		while(true) {
			System.out.print("1:貯金する 2:引き出す 3:情報をみる 4:終了>>");
			int select = sc.nextInt();
			switch(select) {
				case 1 -> {
					System.out.print("金額を入力>>");
					int money = sc.nextInt();
					cb.saveMoney(money);
				}
				case 2 ->{
					System.out.print("金額を入力>>");
					int money = sc.nextInt();
					cb.withDraw(money);
				}
				case 3 -> cb.displayAmount();
				default ->{
					System.out.println("アプリケーションを終了します");
					return;
				}
			}
		}

	}

}
class CashBox{
	private String color;
	private int amount=0;
	
	public CashBox(String color) {
		//this.color=color;
		this.setColor(color);
	}
	public void setColor(String color) {
		if(color == null) {
			throw new IllegalArgumentException("色がnullです。処理を中断");
		}
		this.color=color;
	}
	public String getColor() {
		return this.color;
	}
	public void setAmount(int amount) {
		if(amount < 0) {
			throw new IllegalArgumentException("値が不正です。処理を中断");
		}
		this.amount=amount;
	}
	public int getAmount() {
		return this.amount;
	}
	public void saveMoney(int money) {
		if(money < 0) {
			System.out.println("無効な値です");
			return;
		}
		System.out.println(money+"円貯金した!");
		this.amount+=money;
		this.displayAmount();
	}
	public void withDraw(int money) {
		if(money < 0) {
			System.out.println("無効な値です");
			return;
		}
		int m = Math.min(money, this.amount);
		System.out.println(m+"円引き出した!");
		this.amount -= m;
		this.displayAmount();
	}
	public void displayAmount() {
		System.out.printf("%sの貯金箱:残高---%d円%n", this.color,this.amount);
	}
}
Java
スポンサーリンク
シェアする
mjpurinをフォローする

コメント

タイトルとURLをコピーしました