« 割り勘計算機 | トップページ | EditTextとTextViewの切り替え »

2011年1月27日 (木)

割り勘計算機(2)

ということで、前回の続きです。

現実に則したもう少し複雑な計算ができるクラスを作ります。

具体的には、

条件が違うグループを内包している。
グループをまたがって集計できる。
グループの追加、削除、変更ができる。

という機能があればよさそうですね。これらを組み込んだComplexWarikanクラスを作ってみましょう。

class ComplexWarikan extends Warikan {
	private int actualNubmer ;
	private int totalDept;
	private int payment;
	
	private ArrayList DiscountGroup;
	private ArrayList FixedGroup;
	
	public void addDiscountGroup (int number, int discount){
		DiscountGroup.add(new DiscountWarikan());
		int pos = DiscountGroup.size()-1;
		DiscountGroup.get(pos).setNumber(number);
		DiscountGroup.get(pos).setDiscount(discount);
	}
	public void modDiscountGroup(int pos,int number, int discount){
		DiscountGroup.get(pos).setNumber(number);
		DiscountGroup.get(pos).setDiscount(discount);
	}
	public void removeDiscountGroup(int pos){
		DiscountGroup.remove(pos);
	}

まず、値引きグループと定額グループを入れるArrayListを作ります。そして、それらにクラスを追加したり変更したりするメソッドを用意します。計算式そのものはDiscountWarikanなり、FixedWarikanなりにすでにあるので、金額をセットすれば必要な計算はクラスがやります。
グループを2種類に分けているのは、設定が分かれているUIの方が使いやすそうだから、です。混在させてしまうこともできるのですが、わざわざ凝ったことをして使いにくくする必要もないので別にしています。

とりあえず、定額グループの内容はほぼ同じなのでカットして、最後の集計です。とはいっても、計算というほどのことはなく、ただ、足し算するだけです。最後に通常価格の支払いを計算しておしまい。実際にはグループに反映させなければいけないのですが、それはUIの機能なので、Viewを埋めるときにつくることにします。

	private void calcTotalDebt(){
		// get sum of debt
		// that's total amount of getDept()
		int debt = 0;
		for	(int i=0 ; i<FixedGroup.size() ; i++ ){
			debt += FixedGroup.get(i).getDebt() ;
		}
		for	(int i=0 ; i<DiscountGroup.size() ; i++ ){
			debt += DiscountGroup.get(i).getDebt() ;
		}
		totalDept = debt;
	}

	private void calcActualNumber() {
		// count person who joined Warikan.
		// if class report isWarikan=false, 
		// they don't join Warikan
		int number =0;
		for (int i=0; i<DiscountGroup.size();i++){
			if(DiscountGroup.get(i).isWarikan()) {
			} else {
				number += DiscountGroup.get(i).getNumber();
			}
		}
		for (int i=0; i<FixedGroup.size();i++){
			if(FixedGroup.get(i).isWarikan()) {
			} else {
				number += FixedGroup.get(i).getNumber();
			}
		}
		actualNubmer =number;
	}
	public int getPayment() {
		// so, we are going to calc payment for this Warikan.
		calcTotalDebt();
		calcActualNumber();
		payment = (int) Math.ceil((double)(totalpayment+totalDept)/actualNubmer/roundup)*roundup;
		return payment;
	}
とりあえず、Javaっぽくなってきました。ただ、このコード、まだUIから駆動してないので、なんか間違いがあるかもしれません。あしからず。

« 割り勘計算機 | トップページ | EditTextとTextViewの切り替え »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/60027/50703643

この記事へのトラックバック一覧です: 割り勘計算機(2):

« 割り勘計算機 | トップページ | EditTextとTextViewの切り替え »