package com.yokmama.learn10.chapter06.lesson27;
import android.text.TextUtils;
import java.text.DecimalFormat;
public class Calculator {
private StringBuilder mInputNumber = new StringBuilder();
private String mOperator;
private float mResult = 0;
/**
* 入力処理.
*
* @param value 値
*/
public String input(String value) {
if (isNumber(value) || TextUtils.equals(value, ".")) {
//数字か小数点なら数値として処理
mInputNumber.append(value);
return mInputNumber.toString();
} else if (isOperator(value)) {
//それ以外は計算操作として処理
if (value.equals("=")) {
//イコールが入力されたら計算を実行
if (mOperator != null) {
doCalc(mOperator);
mOperator = null;
}
return new DecimalFormat().format(mResult);
} else {
//イコール以外は計算演算子として処理
if (mOperator != null) {
//計算操作中だった場合は計算を実行
doCalc(mOperator);
} else if (mInputNumber.length() > 0) {
//計算操作をしていない場合は数字を格納
mResult = Float.parseFloat(mInputNumber.toString());
mInputNumber = new StringBuilder();
}
mOperator = value;
return mOperator;
}
} else {
return null;
}
}
/**
* 計算を実行.
*
* @param value 値
*/
private void doCalc(String value) {
if (!TextUtils.isEmpty(mInputNumber.toString())) {
if (value.equals("+")) {
mResult = mResult + Float.parseFloat(mInputNumber.toString());
} else if (value.equals("-")) {
mResult = mResult - Float.parseFloat(mInputNumber.toString());
} else if (value.equals("×")) {
mResult = mResult * Float.parseFloat(mInputNumber.toString());
} else if (value.equals("÷")) {
mResult = mResult / Float.parseFloat(mInputNumber.toString());
}
mInputNumber = new StringBuilder();
}
}
/**
* 計算をリセット.
*/
public void reset() {
mOperator = null;
mResult = 0;
mInputNumber = new StringBuilder();
}
/**
* 文字列が数字か確認.
*
* @param value 値
*/
private boolean isNumber(String value) {
try {
Integer.parseInt(value);
return true;
} catch (NumberFormatException e) {
}
return false;
}
/**
* 文字列が計算操作か確認.
*
* @param value 値
*/
private boolean isOperator(String value) {
if (value.equals("+") || value.equals("-") || value.equals("×")
|| (value.equals("÷") || value.equals("="))) {
return true;
}
return false;
}
}