package zj.dzh.Calculator;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
//显示结果
private EditText resultText;
//按钮0-9
private Button btn0,btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9;
//运算符
private Button plus; // 加号+
private Button sub; // 减号-
private Button multi; // 乘号×
private Button divide; // 除号÷
private Button point; // 小数点.
private Button equal; // 等于=
private Button clean; // 清空
private Button delete; // 删除
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
public void initView() {
//绑定数字控件
btn0 = findViewById(R.id.btn0);
btn1 = findViewById(R.id.btn1);
btn2 = findViewById(R.id.btn2);
btn3 = findViewById(R.id.btn3);
btn4 = findViewById(R.id.btn4);
btn5 = findViewById(R.id.btn5);
btn6 = findViewById(R.id.btn6);
btn7 = findViewById(R.id.btn7);
btn8 = findViewById(R.id.btn8);
btn9 = findViewById(R.id.btn9);
//绑定运算符控件
plus = findViewById(R.id.plus);
sub = findViewById(R.id.sub);
multi = findViewById(R.id.multi);
divide = findViewById(R.id.divide);
point = findViewById(R.id.point);
equal = findViewById(R.id.equal);
clean = findViewById(R.id.clean);
delete = findViewById(R.id.delete);
//绑定文本框
resultText = findViewById(R.id.result);
//设置点击事件的监听器
btn0.setOnClickListener(this);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
btn3.setOnClickListener(this);
btn4.setOnClickListener(this);
btn5.setOnClickListener(this);
btn6.setOnClickListener(this);
btn7.setOnClickListener(this);
btn8.setOnClickListener(this);
btn9.setOnClickListener(this);
plus.setOnClickListener(this);
sub.setOnClickListener(this);
multi.setOnClickListener(this);
divide.setOnClickListener(this);
equal.setOnClickListener(this);
point.setOnClickListener(this);
clean.setOnClickListener(this);
delete.setOnClickListener(this);
}
@Override
public void onClick(View view) {
//获取文本内容
String input = resultText.getText().toString();
switch (view.getId()){//选择按钮id
case R.id.btn0:
case R.id.btn1:
case R.id.btn2:
case R.id.btn3:
case R.id.btn4:
case R.id.btn5:
case R.id.btn6:
case R.id.btn7:
case R.id.btn8:
case R.id.btn9:
resultText.setText(input + ((Button)view).getText());
break;
case R.id.point:
if (input.isEmpty() || input.substring(input.length() - 1).equals(" "))
return;//如果最后是空格,无响应
else
resultText.setText(input + '.');
break;
//加减乘除,运算符前后都是空格
case R.id.plus:
case R.id.sub:
case R.id.multi:
case R.id.divide:
resultText.setText(input + " " + ((Button)view).getText() + " ");
break;
case R.id.clean://清除输入框
resultText.setText("");
break;
case R.id.delete://从后往前删除字符
if(!input.isEmpty())
resultText.setText(input.substring(0, input.length() - 1));
break;
case R.id.equal://计算运算结果
getResult();//回调函数
break;
}
}
//运算结果的方法
private void getResult(){
//获取文本框的内容
String exp = resultText.getText().toString();
if(exp==null||exp.equals("")){//如果内容为空
return;
}
if(!exp.contains(" ")){//如果不包含运算符
return;
}
double result = 0.0;//返回结果
/***********进行字符串截取**************/
//运算符前的数字,从0下标到第一个空格下标前
String s1 = exp.substring(0,exp.indexOf(" "));
//运算符,第一个空格下标和第二个空格下标之间
String op = exp.substring(exp.indexOf(" ")+1,exp.indexOf(" ")+2);
//运算符后的数字,从第二个空格后全是
String s2 = exp.substring(exp.indexOf(" ")+3);
if(!s1.equals("")&&!s2.equals("")) {//如果数字合法
double d1 = Double.parseDouble(s1);//则数字都是double类型
double d2 = Double.parseDouble(s2);
if (op.equals("+")) //如果是 +
result = d1 + d2;
else if (op.equals("-"))
result = d1 - d2;
else if (op.equals("×"))
result = d1 * d2;
else if (op.equals("÷")) {
if (d2 == 0) //如果被除数是0
Toast.makeText(this,"除数不能为0,请重新输入!",Toast.LENGTH_SHORT).show();
else //否则执行正常是除法运算
result = d1 / d2;
}
if (!s1.contains(".") && !s2.contains(".") && !op.equals("÷")) {//如果都是整型
int r = (int) result;
resultText.setText(r + "");
} else{//如果有浮点型
resultText.setText(result + "");
}
} else if(!s1.equals("") && s2.equals("")){//如果是只输入运算符前的数
return;//直接返回当前文本框的内容
} 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;
resultText.setText(r + "");
} else{
resultText.setText(result + "");
}
}else {
resultText.setText("");
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
简单计算器.zip (48个子文件)
Calculator
.gradle
buildOutputCleanup
cache.properties 59B
buildOutputCleanup.lock 17B
checksums
md5-checksums.bin 26KB
sha1-checksums.bin 43KB
checksums.lock 17B
vcs-1
gc.properties 0B
configuration-cache
gc.properties 0B
6.7.1
fileChanges
last-build.bin 1B
vcsMetadata-1
fileHashes
fileHashes.lock 17B
gc.properties 0B
gradle.properties 1019B
gradle
wrapper
gradle-wrapper.jar 53KB
gradle-wrapper.properties 244B
app
src
androidTest
java
zj
dzh
Calculator
ExampleInstrumentedTest.java 773B
test
java
zj
dzh
Calculator
ExampleUnitTest.java 394B
main
java
zj
dzh
Calculator
MainActivity.java 7KB
res
mipmap-xxhdpi
ic_launcher_round.png 12KB
ic_launcher.png 8KB
mipmap-hdpi
ic_launcher_round.png 5KB
ic_launcher.png 4KB
drawable-v24
ic_launcher_foreground.xml 2KB
icon.png 11KB
mipmap-anydpi-v26
ic_launcher.xml 276B
ic_launcher_round.xml 276B
values-night
themes.xml 840B
mipmap-mdpi
ic_launcher_round.png 3KB
ic_launcher.png 3KB
mipmap-xxxhdpi
ic_launcher_round.png 16KB
calculator.png 4KB
ic_launcher.png 10KB
mipmap-xhdpi
ic_launcher_round.png 7KB
ic_launcher.png 5KB
values
colors.xml 572B
strings.xml 74B
themes.xml 840B
layout
activity_main.xml 5KB
drawable
ic_launcher_background.xml 6KB
button_selector.xml 530B
AndroidManifest.xml 731B
proguard-rules.pro 770B
build.gradle 1KB
.gitignore 6B
gradlew.bat 2KB
build.gradle 637B
settings.gradle 49B
local.properties 335B
gradlew 5KB
.gitignore 240B
共 48 条
- 1
资源评论
白川不会秃头
- 粉丝: 7
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功