package
com.example.df.firstapp;
import
android.support.v7.app.AppCompatActivity;
import
android.os.Bundle;
import
android.view.View;
import
android.widget.Button;
import
android.widget.EditText;
import
android.text.TextUtils;
public
class
MainActivity
extends
AppCompatActivity
implements
View.OnClickListener {
Button bt_num0,bt_num1,bt_num2,bt_num3,bt_num4,bt_num5,bt_num6,bt_num7,
bt_num8,bt_num9,bt_delete,bt_div,bt_mult,bt_minus,bt_plus,bt_equal,bt_dot,bt_clear;
private
EditText et_calc;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViewAndListener();
}
private
void
initViewAndListener() {
bt_num0 = (Button)findViewById(R.id.bt_num0);
bt_num0.setOnClickListener(
this
);
bt_num1 = (Button)findViewById(R.id.bt_num1);
bt_num1.setOnClickListener(
this
);
bt_num2 =(Button) findViewById(R.id.bt_num2);
bt_num2.setOnClickListener(
this
);
bt_num3 = (Button)findViewById(R.id.bt_num3);
bt_num3.setOnClickListener(
this
);
bt_num4 = (Button)findViewById(R.id.bt_num4);
bt_num4.setOnClickListener(
this
);
bt_num5 = (Button)findViewById(R.id.bt_num5);
bt_num5.setOnClickListener(
this
);
bt_num6 = (Button)findViewById(R.id.bt_num6);
bt_num6.setOnClickListener(
this
);
bt_num7 = (Button)findViewById(R.id.bt_num7);
bt_num7.setOnClickListener(
this
);
bt_num8 = (Button)findViewById(R.id.bt_num8);
bt_num8.setOnClickListener(
this
);
bt_num9 = (Button)findViewById(R.id.bt_num9);
bt_num9.setOnClickListener(
this
);
bt_delete = (Button)findViewById(R.id.bt_delete);
bt_delete.setOnClickListener(
this
);
bt_div = (Button)findViewById(R.id.bt_div);
bt_div.setOnClickListener(
this
);
bt_mult = (Button)findViewById(R.id.bt_mult);
bt_mult.setOnClickListener(
this
);
bt_minus = (Button)findViewById(R.id.bt_minus);
bt_minus.setOnClickListener(
this
);
bt_plus = (Button)findViewById(R.id.bt_plus);
bt_plus.setOnClickListener(
this
);
bt_equal = (Button)findViewById(R.id.bt_equal);
bt_equal.setOnClickListener(
this
);
et_calc = (EditText)findViewById(R.id.et_calc);
bt_dot = (Button)findViewById(R.id.bt_dot);
bt_dot.setOnClickListener(
this
);
bt_clear = (Button)findViewById(R.id.bt_clear);
bt_clear.setOnClickListener(
this
);
}
private
boolean
lastIsOperator;
private
String lastOperators =
""
;
private
double
firstNumber = 0D;
private
double
sencondNumber = 0D;
public
void
onClick(View v) {
String currentText = et_calc.getText().toString();
String operatorNumber =
""
;
if
(currentText.equals(
"0"
)) {
et_calc.setText(
""
);
}
operatorNumber = et_calc.getText().toString();
if
(!lastOperators.equals(
""
))
{
int
index = operatorNumber.lastIndexOf(lastOperators);
operatorNumber = operatorNumber.substring(index+
1
);
}
switch
(v.getId()) {
case
R.id.bt_num0:
et_calc.setText(et_calc.getText() +
"0"
);
lastIsOperator =
false
;
break
;
case
R.id.bt_num1:
et_calc.setText(et_calc.getText() +
"1"
);
lastIsOperator =
false
;
break
;
case
R.id.bt_num2:
et_calc.setText(et_calc.getText() +
"2"
);
lastIsOperator =
false
;
break
;
case
R.id.bt_num3:
et_calc.setText(et_calc.getText() +
"3"
);
lastIsOperator =
false
;
break
;
case
R.id.bt_num4:
et_calc.setText(et_calc.getText() +
"4"
);
lastIsOperator =
false
;
break
;
case
R.id.bt_num5:
et_calc.setText(et_calc.getText() +
"5"
);
lastIsOperator =
false
;
break
;
case
R.id.bt_num6:
et_calc.setText(et_calc.getText() +
"6"
);
lastIsOperator =
false
;
break
;
case
R.id.bt_num7:
et_calc.setText(et_calc.getText() +
"7"
);
lastIsOperator =
false
;
break
;
case
R.id.bt_num8:
et_calc.setText(et_calc.getText() +
"8"
);
lastIsOperator =
false
;
break
;
case
R.id.bt_num9:
et_calc.setText(et_calc.getText() +
"9"
);
lastIsOperator =
false
;
break
;
case
R.id.bt_dot:
et_calc.setText(et_calc.getText() +
"."
);
lastIsOperator =
false
;
break
;
case
R.id.bt_clear:
et_calc.setText(
""
);
lastIsOperator =
false
;
firstNumber=0D;
sencondNumber=0D;
lastOperators=
"="
;
break
;
case
R.id.bt_delete:
if
(TextUtils.isEmpty(et_calc.getText())) {
return
;
}
lastIsOperator =
false
;
et_calc.setText(currentText.substring(
0
, currentText.length() -
1
).length() >
0
? currentText.substring(
0
, currentText.length() -
1
) :
"0"
);
break
;
case
R.id.bt_div:
if
((TextUtils.isEmpty(et_calc.getText())
|| lastIsOperator) && !lastOperators.equals(
"="
)) {
return
;
}
opratorCalc(operatorNumber,
"÷"
);
lastIsOperator =
true
;
et_calc.setText(et_calc.getText() +
"÷"
);
lastOperators =
"÷"
;
break
;
case
R.id.bt_mult:
if
((TextUtils.isEmpty(et_calc.getText())
|| lastIsOperator) && !lastOperators.equals(
"="
)) {
return
;
}
opratorCalc(operatorNumber,
"*"
);
lastIsOperator =
true
;
et_calc.setText(et_calc.getText() +
"*"
);
lastOperators =
"*"
;
break
;
case
R.id.bt_minus:
if
((TextUtils.isEmpty(et_calc.getText())
|| lastIsOperator) && !lastOperators.equals(
"="
)) {
return
;
}
opratorCalc(operatorNumber,
"-"
);
lastIsOperator =
true
;
et_calc.setText(et_calc.getText() +
"-"
);
lastOperators =
"-"
;
break
;
case
R.id.bt_plus:
if
((TextUtils.isEmpty(et_calc.getText())
|| lastIsOperator) && !lastOperators.equals(
"="
)) {
return
;
}
opratorCalc(operatorNumber,
"+"
);
lastIsOperator =
true
;
et_calc.setText(et_calc.getText() +
"+"
);
lastOperators =
"+"
;
break
;
case
R.id.bt_equal:
double
result = 0D;
if
(TextUtils.isEmpty(lastOperators))
{
return
;
}
opratorResult(operatorNumber);
sencondNumber = 0D;
lastOperators =
"="
;
lastIsOperator =
true
;
et_calc.setText(et_calc.getText() +
"\n="
+ String.valueOf(firstNumber));
break
;
}
}
private
void
operate(String operatorNumber)
{
if
(sencondNumber != 0D)
{
if
(lastOperators.equals(
"÷"
))
{
sencondNumber = sencondNumber / Double.parseDouble(operatorNumber);
firstNumber = firstNumber / sencondNumber;
}
else
if
(lastOperators.equals(
"*"
))
{
sencondNumber = sencondNumber * Double.parseDouble(operatorNumber);
firstNumber = firstNumber * sencondNumber;
}
else
if
(lastOperators.equals(
"+"
))
{
sencondNumber = Double.parseDouble(operatorNumber);
firstNumber = firstNumber + sencondNumber;
}
else
if
(lastOperators.equals(
"-"
))
{
sencondNumber = Double.parseDouble(operatorNumber);
firstNumber = firstNumber - sencondNumber;
}
}
Else
{
if
(lastOperators.equals(
"÷"
))
{
firstNumber = firstNumber / Double.parseDouble(operatorNumber);
}
else
if
(lastOperators.equals(
"*"
))
{
firstNumber = firstNumber * Double.parseDouble(operatorNumber);
}
else
if
(lastOperators.equals(
"+"
))
{
firstNumber = firstNumber + Double.parseDouble(operatorNumber);
}
else
if
(lastOperators.equals(
"-"
))
{
firstNumber= firstNumber - Double.parseDouble(operatorNumber);
}
}
}
public
void
opratorResult(String operatorNumber)
{
operate(operatorNumber);
}
public
void
opratorCalc(String operatorNumber,String currentOprator)
{
if
(TextUtils.isEmpty(lastOperators))
{
firstNumber = Double.parseDouble(operatorNumber);
return
;
}
if
(lastOperators.equals(currentOprator))
{
if
(lastOperators.equals(
"÷"
))
{
firstNumber = firstNumber / Double.parseDouble(operatorNumber);
}
else
if
(lastOperators.equals(
"*"
))
{
firstNumber = firstNumber * Double.parseDouble(operatorNumber);
}
else
if
(lastOperators.equals(
"+"
))
{
firstNumber = firstNumber + Double.parseDouble(operatorNumber);
}
else
if
(lastOperators.equals(
"-"
))
{
firstNumber = firstNumber - Double.parseDouble(operatorNumber);
}
return
;
}
operate(operatorNumber);
}
}