Developer

【はじめてのJava】金額計算プログラムを作ってみよう①【Javaプログラム実践編】
2022.01.31
Lv1

【はじめてのJava】金額計算プログラムを作ってみよう①【Javaプログラム実践編】

はじめてのJava

このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。


今回は、今まで学習してきた内容を組み合わせて実際のプログラムを作成してみようと思います。
少々長くなりますので、いくつかのパートに分けて解説をしていきます。

目次


作成するプログラムの紹介

今回作成するプログラムは、お店のレジの動作をプログラムで表してみたものです。
具体的には以下の3つの操作を行います。

①商品の代金を入力させる。
②支払金額を入力させる。
③お釣りの金額を計算し、金額とどの通貨が何枚必要かを計算して表示する。

(2000円札は考えないこととします。)

※画面に入力したデータが不正(数字じゃない or マイナスの数字になっている)な場合には、エラー表示を行います。
<正しく実行された場合>

<入力したデータが不正な場合>

※ここで紹介するサンプルコードはあくまで一例ですので、同じような動作をできる別の書き方もぜひ考えてみてください!


クラス設計

今回のプログラムを作成するにあたり、クラスを2つに分けて作ろうと思います。
もちろん、1つのクラスに分けて作成しても問題ないのですが、今回の動作を見ると大きく「画面に入力する」部分と「値を計算する」部分に分けられます。
特に、画面に入力する部分の処理では、入力値のチェックなどを行いますので、計算部分とは処理を分けて考えた方が分かりやすいはずです。

①CashRegisterクラス(金額の計算を行う側)

 →こちらのクラスでは、入力された金額を受け取って、お釣りの金額や貨幣の枚数を計算します。
【必要なメソッド(staticメソッド)】
・お釣りの計算と枚数を画面に表示するメソッド(calcChangeメソッド)
 引数に代金と支払金額を渡して、結果を画面に表示する処理を行います。

②ExecuteCashRegisterクラス(金額の入力をする側)

 →こちらのクラスでは、画面から値を入力して、そのチェックを行い、CashRegisterクラスへと値を渡します。
【必要なメソッド】
・実行メソッド(mainメソッド)
 mainメソッドの内部でScannerクラスを利用して画面から値を受け取ります。
 画面から受け取った値に対して入力値が不正でないかのチェックを行います。


CashRegisterクラス

CaskRegisterクラスでは、計算を行うメソッドを定義していきます。
まず、staticメソッドの「calcChangeメソッド」を定義します。引数はint型の変数を2つ定義します。
処理は画面に表示を行うだけなので、戻り値はvoidで定義します。
メソッドの定義の復習はこちら↓
【はじめてのJava】メソッドの作り方【オブジェクトとクラス編】

class CashRegister{
	public staatic void calcChange(int price,int payment){
	
	}
}

次に、メソッドの処理を記述していきます。
今回の処理は、「代金と支払金額からお釣りの金額を計算する」「お釣りの金額を貨幣が何枚ずつで表すことができるか計算する」という2つになります。
まずは、「代金と支払金額からお釣りの金額を計算する」処理を作成します。
メソッド内で計算結果を格納するローカル変数を定義し、画面に表示します。

class CashRegister{
	public staatic void calcChange(int price,int payment){
		//お釣りの計算と画面表示
		int change = payment - price;
		System.out.println("お釣り : " + change + "円");
	}
}

次に、「お釣りの金額を貨幣が何枚ずつで表すことができるか計算する」処理を作成します。
先ほど作成したお釣りの金額を格納した変数を利用して、それがどの貨幣で表されるか計算していきます。
計算方法としては、「枚数を調べたい金額で除算を行う→枚数×金額を引く(割った余りを計算する)」という操作を金種の数だけ繰り返していきます。
この時、大きい順に計算していかなければ、正しく計算できないことに注意しましょう!
計算する順番は「10000→5000→1000→500→100→50→10→5→1」になります。
ここで、この金種は順番、値が固定で決まっているものですので、配列を定数として定義して利用します。
配列を利用することで、for文を利用して繰り返し処理として記述することができます。
繰り返し処理の中でそれぞれの貨幣の枚数を計算し、画面に表示します。
この時、枚数が0枚なら表示しないように条件分岐を行います。
配列、Javaでの計算の復習はこちら↓
【はじめてのjava】配列【配列とArrayList編】
【はじめてのJava】代入演算子と算術演算子【演算子編】

class CashRegister {
	// 金額の種類は定数として配列で定義する!(定数なので、static,finalキーワードを使います)
	public static final int[] CURRENCIES = { 10000, 5000, 1000, 500, 100, 50, 10, 5, 1 };

	public static void calcChange(int price,int payment) {
		//お釣りの計算と画面表示
		int change = payment - price;
		System.out.println("お釣り : " + change + "円");

		for (int i = 0; i < CURRENCIES.length; i++) {
			// 枚数の計算
			int count = change / CURRENCIES[i];
			change %= CURRENCIES[i];

			// 画面表示(枚数が0出なければ画面表示を行う)
			if (count != 0) {
				System.out.println(CURRENCIES[i] + "円 : " + count + "枚");
			}
		}
	}
}

実践編・次回の内容

今回は、プログラムのクラス設計の紹介と、計算を行う部分を作成しました。
次回は、画面からデータの入力を受け取る部分を作成していきましょう。


初めてのJavaシリーズの目次はこちら
Javaプログラム実践編の記事一覧はこちら


java 11 の練習問題一覧はこちら
はじめてのJavaシリーズの練習問題一覧はこちら