Android实训案例(一)——计算器的运算逻辑
应一个朋友的邀请,叫我写一个计算器,开始觉得,就一个计算器嘛,很简单的,但是写着写着发现自己写出来的逻辑真不严谨,于是搜索了
一下,看到mk(没有打广告….)上有视频,于是看了下他的逻辑,以前还真是小瞧计算器了,计算器要是高级一点的处理起来更加繁琐,这里就
做了一个简单一点的,这次用的是AndroidStudio开发的,毕竟自己也是一直很推崇AS,但是在之前的博客里都只是为了方便,一直在用
Eclipse
一直强烈推荐大家还是转移到AS上去,虽然我工作一直在用Eclipse,不过AS的脚步一直没有落下,好处多多!
运行截图:
这个仍然还是有许多不完善的地方,如果看官觉得可以改的话,欢迎参与
activity_main.xml
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:background="@drawable/main_bg"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center">
android:id="@+id/et_showview"
android:layout_width="350dip"
android:layout_height="100dip"
android:background="@drawable/whitebg"
android:editable="false"
android:gravity="bottom|right"
android:textSize="20sp"/>
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginTop="20dip"
android:gravity="center_horizontal"
android:orientation="vertical">
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal">
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:gravity="center_horizontal"
android:orientation="horizontal">
android:id="@+id/btn_7"
android:layout_width="80dp"
android:layout_height="80dp"
android:background="@drawable/white_btn_selector"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:text="7"
android:textSize="20sp"/>
android:id="@+id/btn_8"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="10dip"
android:background="@drawable/white_btn_selector"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:text="8"
android:textSize="20sp"/>
android:id="@+id/btn_9"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="10dip"
android:background="@drawable/white_btn_selector"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:text="9"
android:textSize="20sp"/>
android:id="@+id/btn_minus"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="10dip"
android:background="@drawable/white_btn_selector"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:text="-"
android:textSize="20sp"/>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:gravity="center_horizontal"
android:orientation="horizontal">
android:id="@+id/btn_4"
android:layout_width="80dp"
android:layout_height="80dp"
android:background="@drawable/white_btn_selector"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:text="4"
android:textSize="20sp"/>
android:id="@+id/btn_5"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="10dip"
android:background="@drawable/white_btn_selector"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:text="5"
android:textSize="20sp"/>
android:id="@+id/btn_6"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="10dip"
android:background="@drawable/white_btn_selector"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:text="6"
android:textSize="20sp"/>
android:id="@+id/btn_pluse"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="10dip"
android:background="@drawable/white_btn_selector"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:text="+"
android:textSize="20sp"/>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:gravity="center_horizontal"
android:orientation="horizontal">
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
android:id="@+id/btn_1"
android:layout_width="80dp"
android:layout_height="80dp"
android:background="@drawable/white_btn_selector"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:text="1"
android:textSize="20sp"/>
android:id="@+id/btn_2"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="10dip"
android:background="@drawable/white_btn_selector"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:text="2"
android:textSize="20sp"/>
android:id="@+id/btn_3"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="10dip"
android:background="@drawable/white_btn_selector"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:text="3"
android:textSize="20sp"/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:orientation="horizontal">
android:id="@+id/btn_0"
android:layout_width="170dp"
android:layout_height="80dp"
android:background="@drawable/white_btn_selector"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:text="0"
android:textSize="20sp"/>
android:id="@+id/btn_point"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="10dip"
android:background="@drawable/white_btn_selector"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:text="."
android:textSize="20sp"/>
android:id="@+id/btn_equal"
android:layout_width="80dp"
android:layout_height="170dip"
android:layout_marginLeft="10dip"
android:background="@drawable/orange_btn_selector"
android:gravity="bottom|right"
android:paddingBottom="10dp"
android:paddingRight="10dp"
android:text="="
android:textSize="20sp"/>
android:gravity="center"
android:autoLink="web"
android:layout_width="350dp"
android:layout_height="0dp"
android:layout_marginTop="20dp"
android:layout_weight="1"
android:text="微博:http://weibo.com/Glorystys
博客:http://blog.csdn.net/qq_26787115"
android:textColor="@android:color/white"
android:textSize="20sp"/>
MainActivity
packagecom.lgl.calculator;
importandroid.os.Bundle;
importandroid.support.v7.app.AppCompatActivity;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.EditText;
/
计算器
/
publicclassMainActivityextendsAppCompatActivityimplementsView.OnClickListener{
privateButtonbtn_0;
privateButtonbtn_1;
privateButtonbtn_2;
privateButtonbtn_3;
privateButtonbtn_4;
privateButtonbtn_5;
privateButtonbtn_6;
privateButtonbtn_7;
privateButtonbtn_8;
privateButtonbtn_9;
privateButtonbtn_point;//小数点
privateButtonbtn_divide;//除以
privateButtonbtn_multiply;//乘以
privateButtonbtn_minus;//减去
privateButtonbtn_pluse;//加
privateButtonbtn_equal;//等于
privateButtonbtn_clear;//清空
privateButtonbtn_del;//取消
privateEditTextet_showview;//输入框
privatedoubledou=0;//接收结果
/
加一个标识
需求就是我们运算出结果的时候,再次点击数字及你选哪个下一次运算,这个时候,输入框应该自动为空
/
privatebooleanflag;//清空标识
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savwww.shanxiwang.netedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
privatevoidinitView(){
btn_0=(Button)findViewById(R.id.btn_0);
btn_1=(Button)findViewById(R.id.btn_1);
btn_2=(Button)findViewById(R.id.btn_2);
btn_3=(Button)findViewById(R.id.btn_3);
btn_4=(Button)findViewById(R.id.btn_4);
btn_5=(Button)findViewById(R.id.btn_5);
btn_6=(Button)findViewById(R.id.btn_6);
btn_7=(Button)findViewById(R.id.btn_7);
btn_8=(Button)findViewById(R.id.btn_8);
btn_9=(Button)findViewById(R.id.btn_9);
btn_point=(Button)findViewById(R.id.btn_point);//小数点
btn_divide=(Button)findViewById(R.id.btn_divide);//除以
btn_multiply=(Button)findViewById(R.id.btn_multiply);//乘以
btn_minus=(Button)findViewById(R.id.btn_minus);//减去
btn_pluse=(Button)findViewById(R.id.btn_pluse);//加
btn_equal=(Button)findViewById(R.id.btn_equal);//等于
btn_clear=(Button)findViewById(R.id.btn_clear);
btn_del=(Button)findViewById(R.id.btn_del);
et_showview=(EditText)findViewById(R.id.et_showview);
btn_0.setOnClickListener(this);
btn_1.setOnClickListener(this);
btn_2.setOnClickListener(this);
btn_3.setOnClickListener(this);
btn_4.setOnClickListener(this);
btn_5.setOnClickListener(this);
btn_6.setOnClickListener(this);
btn_7.setOnClickListener(this);
btn_8.setOnClickListener(this);
btn_9.setOnClickListener(this);
btn_point.setOnClickListener(this);
btn_divide.setOnClickListener(this);
btn_multiply.setOnClickListener(this);
btn_minus.setOnClickListener(this);
btn_pluse.setOnClickListener(this);
btn_equal.setOnClickListener(this);
btn_clear.setOnClickListener(this);
btn_del.setOnClickListener(this);
}
@Override
publicvoidonClick(Viewv){
//我们在这里实现业务逻辑
Stringstr=et_showview.getText().toString();
switch(v.getId()){
//我们点击数字键,输入框就收到我们的计算数字
caseR.id.btn_0:
caseR.id.btn_1:
caseR.id.btn_2:
caseR.id.btn_3:
caseR.id.btn_4:
caseR.id.btn_5:
caseR.id.btn_6:
caseR.id.btn_7:
caseR.id.btn_8:
caseR.id.btn_9:
caseR.id.btn_point:
//再次输入的时候判断,把前面的清空,再把点击的按钮放在输入框上
if(flag){
flag=false;
str="";
et_showview.setText("");
}
//我们只要点击键盘,相应的数字添加在EditText上
et_showview.setText(str+((Button)v).getText());
break;
//运算符也是一样需要添加的
caseR.id.btn_pluse:
caseR.id.btn_minus:
caseR.id.btn_multiply:
caseR.id.btn_divide:
//再次输入的时候判断,把前面的清空,再把点击的按钮放在输入框上
if(flag){
flag=false;
str="";
et_showview.setText("");
}
//为了计算方便,我们可以在前后添加空格
et_showview.setText(str+""+((Button)v).getText()+"");
break;
caseR.id.btn_del:
//再次输入的时候判断,把前面的清空,再把点击的按钮放在输入框上
if(flag){
flag=false;
str="";
et_showview.setText("");
}elseif(str!=null&&!str.equals("")){//判断,因为我们需要一个个删,首先确定是不是空或者""
//用substring()截取字符长度-1再设置回去形成删一个的效果
et_showview.setText(str.substring(0,str.length()-1));
}
break;
//清除按钮,直接把输入框设置成空
caseR.id.btn_clear:
flag=false;
str="";
et_showview.setText("");
break;
//计算结果
caseR.id.btn_equal:
getResult();
break;
}
}
//等号计算结果
privatevoidgetResult(){
//首先取一下你输入完后现在输入框的内容
Stringresult=et_showview.getText().toString();
//当我们的输入框是null或者""时我们不进行操作
if(result==null||result.equals("")){
return;
}
//我们要计算结果,必须知道输入框是否有操作符,判断条件就是前后是否在空格,否则不进行操作
if(!result.contains("")){
//没有运算符,所以不用运算
return;
}
//当我点击等号的时候,清空标识设置为true,但是如果之前有的话,设置成false
if(flag){
flag=false;
return;
}
flag=true;
//如果有空格,我们就截取前后段再获取运算符进行计算
Stringstr1=result.substring(0,result.indexOf(""));//运算符前面字段
Stringop=result.substring(result.indexOf("")+1,result.indexOf("")+2);//截取运算符
Stringstr2=result.substring(result.indexOf("")+3);//运算符后面字段
//这里我们还是要判断str1和str2都不是空才
if(!str1.equals("")&&!str2.equals("")){//第一种情况:都不是空
//强转
doubled1=Double.parseDouble(str1);
doubled2=Double.parseDouble(str2);
//开始计算,定义一个double变量接收结果,定义为全局
if(op.equals("+")){//加
dou=d1+d2;
}elseif(op.equals("-")){//减
dou=d1-d2;
}elseif(op.equals("×")){//乘
dou=d1d2;
}elseif(op.equals("÷")){//除
//除数为0不计算
if(d2==0){
dou=0;
}else{
dou=d1/d2;
}
}
//我们之前把他强转为double类型了,但是如果没有小数点,我们就是int类型
if(!str1.contains(".")&&!str2.contains(".")&&!op.equals("÷")){
inti=(int)dou;
et_showview.setText(i+"");
}else{//如果有小数点
et_showview.setText(dou+"");
}
}elseif(!str1.equals("")&&str2.equals("")){//第二种情况:str2是空
//这种情况就不运算了
et_showview.setText(result);
}elseif(str1.equals("")&&!str2.equals("")){//第三种情况:str1是空
//这种情况我们就需要判断了,因为此时str1=0;
doubled3=Double.parseDouble(str2);
if(op.equals("+")){//加
dou=0+d3;
}elseif(op.equals("-")){//减
dou=0-d3;
}elseif(op.equals("×")){//乘
dou=0;
}elseif(op.equals("÷")){//除
//除数为0不计算
dou=0;
}
//我们之前把他强转为double类型了,但是如果没有小数点,我们就是int类型
if(!str2.contains(".")){
inti=(int)dou;
et_showview.setText(i+"");
}else{//如果有小数点
et_showview.setText(dou+"");
}
}else{//最后一种情况,他们两个都是空
//我们清空掉
et_showview.setText("");
}
}
}
|
|