お題
クラスの作り方とインスタンスの作り方を学ぼう。アクセス修飾子をつけて適切なカプセル化を行おう。
手順
◯新規クラス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);
}
}


コメント