配色: 字号:
Android实训案例(一)——计算器的运算逻辑
2016-10-18 | 阅:  转:  |  分享 
  
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:id="@+id/btn_clear"

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="C"

android:textSize="20sp"/>




android:id="@+id/btn_del"

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="DEL"

android:textSize="20sp"/>




android:id="@+id/btn_divide"

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_multiply"

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_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("");

}

}

}

献花(0)
+1
(本文系网络学习天...首藏)