我的计算器等于按钮 运算效果不出来 求帮忙 纠结死了
package com.example.calculator;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity implements OnClickListener{
private EditText et;
private Button bt0,bt1,bt2,bt3,bt4,bt5,bt6,
bt7,bt8,bt9,btC,btDEL,btjia,btjian,btcheng,btchu,btdengyu,btdian;
boolean flag;//清空标识 当运算出结果了 再点数字按钮 里面的内容会清空 所以要加标识
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et=(EditText) findViewById(R.id.et);
bt0=(Button) findViewById(R.id.bt0);
bt1=(Button) findViewById(R.id.bt1);
bt2=(Button) findViewById(R.id.bt2);
bt3=(Button) findViewById(R.id.bt3);
bt4=(Button) findViewById(R.id.bt4);
bt5=(Button) findViewById(R.id.bt5);
bt6=(Button) findViewById(R.id.bt6);
bt7=(Button) findViewById(R.id.bt7);
bt8=(Button) findViewById(R.id.bt8);
bt9=(Button) findViewById(R.id.bt9);
btC=(Button) findViewById(R.id.btC);
btDEL=(Button) findViewById(R.id.btDEL);
btjia=(Button) findViewById(R.id.btjia);
btjian=(Button) findViewById(R.id.btjian);
btcheng=(Button) findViewById(R.id.btcheng);
btchu=(Button) findViewById(R.id.btchu);
btdengyu=(Button) findViewById(R.id.btdengyu);
btdian=(Button) findViewById(R.id.btdian);
//以上是实例化按钮
bt0.setOnClickListener(this);
bt1.setOnClickListener(this);
bt2.setOnClickListener(this);
bt3.setOnClickListener(this);
bt4.setOnClickListener(this);
bt5.setOnClickListener(this);
bt6.setOnClickListener(this);
bt7.setOnClickListener(this);
bt8.setOnClickListener(this);
bt9.setOnClickListener(this);
btDEL.setOnClickListener(this);
btC.setOnClickListener(this);
btjia.setOnClickListener(this);
btjian.setOnClickListener(this);
btcheng.setOnClickListener(this);
btchu.setOnClickListener(this);
btdengyu.setOnClickListener(this);
btdian.setOnClickListener(this);
//以上是设置按钮的点击事件
}
public void onClick(View v) {
String str = et.getText().toString();//取显示屏的内容
switch (v.getId()) {
case R.id.bt0:
case R.id.bt1:
case R.id.bt2:
case R.id.bt3:
case R.id.bt4:
case R.id.bt5:
case R.id.bt6:
case R.id.bt7:
case R.id.bt8:
case R.id.bt9:
case R.id.btdian:
if(flag){
flag=false;
str="";
et.setText("");
}
et.setText(str+((Button)v).getText());
//只要点数字按钮或者小数点按钮就把数字或小数点传给EditText显示出来
break;
case R.id.btjia:
case R.id.btjian:
case R.id.btcheng:
case R.id.btchu:
if(flag){
flag=false;
str="";
et.setText("");
}
et.setText(str+""+((Button)v).getText()+"");
break;
case R.id.btDEL:
if(flag){
flag=false;
str="";
et.setText("");
}else if(str!=null&&!str.equals("")){
et.setText(str.substring(0,str.length()-1));
//如果不为空 获取显示屏从第一位开始 减一位数字
}
break;
case R.id.btC:
flag=false;
str="";
et.setText("");
break;
case R.id.btdengyu:
getResult();
break;
}
}
// 运算结果
private void getResult(){
String exp =et.getText().toString();//取显示屏的内容
if(exp==null||exp.equals("")){//如果获取内容是空的就返回
return;
}
if(!exp.contains("")){//因为运算符前面后面有空格 如果内容没有空格就是没有运算符 直接返回
return;
}
double result=0;//用于接收数据 //exp.indexOf("")是当前输入内容前面的第一个空格
String s1 = exp.substring(0,exp.indexOf(""));//运算符前面的字符串
//+1是运算符的位置 +2 是运算符下面的位置
//indexOf() :在字符串中从前向后定位字符和字符串;所有的返回值都是指在字符串的绝对位置,如为空则为- 1
String op = exp.substring(exp.indexOf("")+1,exp.indexOf("")+2);//截取到的运算符
String s2 = exp.substring(exp.indexOf("")+3);//运算符后面的字符串
Log.v("S1", s1);
Log.v("OP", op);
Log.v("S2", s2);
if(!s1.equals("")&&!s2.equals("")){//即运算符前面有数字后面也有数字 例如3+4 8*9
double d1 = Double.parseDouble(s1);//强制转化
double d2 = Double.parseDouble(s2);
if(op.equals("+")){
result=d1+d2;
et.setText(result+"");
}else if(op.equals("-")){
result=d1-d2;
}else if(op.equals("×")){
result=d1*d2;
}else if(op.equals("÷")){
if(d2==0){
result=0;
}else{
result=d1/d2;
}
}
if(!s1.contains(".")&&!s2.contains(".")&&!op.equals("÷")){
int r=(int)result;//如果都没有小数点强制转换成int类型
et.setText(r+"");
}else{//有小数点就是double型
et.setText(result+"");
}
}else if(!s1.equals("")&&s2.equals("")){
et.setText(exp);
}else if(s1.equals("")&&!s2.equals("")){
double d2 = Double.parseDouble(s2);
if(op.equals("+")){
result=0+d2;
}else if(op.equals("-")){
result=0-d2;
}else if(op.equals("×")){
result=0;
}else if(op.equals("÷")){
result=0;
}
if(!s2.contains(".")){
int r=(int)result;
et.setText(r+"");
}else{
et.setText(result+"");
}
}else{
et.setText("");
}
}
}