Android实验 建议计算器
功能简介
可以对整数和小数实现基本的加、减、乘、除功能,可以开方;目前只支持二元运算不支持连续运算,并且不支持带符号运算,可以处理一些基本的错误输入,比如只输入符号然后运算、输入符号+数然后运算、输入书+符号然后运算、除零运算都能处理。C键清除文本框一个字符,CE键清除整个文本框字符,同时可以显示正负数。
界面
这里只有±符号没实现功能。
采用LinearLayout布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="计算器"
android:textSize="30dp"
android:textStyle="bold"
android:gravity="center">
</TextView>
<EditText
android:id="@+id/EditText1"
android:layout_width="match_parent"
android:layout_height="90dp"
android:textSize="30dp"
android:gravity="right|bottom"
tools:layout_editor_absoluteY="46dp"
tools:layout_editor_absoluteX="8dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="horizontal">
<Button
android:id="@+id/ButtonC"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="C"
android:layout_gravity="center"
tools:layout_editor_absoluteY="89dp"
tools:layout_editor_absoluteX="8dp" />
<Button
android:id="@+id/ButtonCE"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="CE"
android:layout_gravity="center"
tools:layout_editor_absoluteY="89dp"
tools:layout_editor_absoluteX="104dp" />
<Button
android:id="@+id/ButtonRight"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="√"
android:layout_gravity="center"
tools:layout_editor_absoluteY="89dp"
tools:layout_editor_absoluteX="192dp" />
<Button
android:id="@+id/ButtonAdd"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="+"
android:layout_gravity="center"
tools:layout_editor_absoluteY="89dp"
tools:layout_editor_absoluteX="288dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="horizontal">
<Button
android:id="@+id/Button1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="1"
android:layout_gravity="center"/>
<Button
android:id="@+id/Button2"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="2"
android:layout_gravity="center"/>
<Button
android:id="@+id/Button3"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="3"
android:layout_gravity="center"/>
<Button
android:id="@+id/ButtonSub"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="-"
android:layout_gravity="center"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="horizontal">
<Button
android:id="@+id/Button4"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="4"
android:layout_gravity="center"/>
<Button
android:id="@+id/Button5"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="5"
android:layout_gravity="center"/>
<Button
android:id="@+id/Button6"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="6"
android:layout_gravity="center"/>
<Button
android:id="@+id/ButtonMul"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="*"
android:layout_gravity="center"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="horizontal">
<Button
android:id="@+id/Button7"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="7"
android:layout_gravity="center"/>
<Button
android:id="@+id/Button8"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="8"
android:layout_gravity="center"/>
<Button
android:id="@+id/Button9"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="9"
android:layout_gravity="center"/>
<Button
android:id="@+id/ButtonDiv"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="/"
android:layout_gravity="center"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="horizontal">
<Button
android:id="@+id/ButtonP"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="."
android:layout_gravity="center"/>
<Button
android:id="@+id/Button0"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="0"
android:layout_gravity="center"/>
<Button
android:id="@+id/ButtonAS"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="±"
android:layout_gravity="center"/>
<Button
android:id="@+id/ButtonEqual"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="="
android:layout_gravity="center"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
逻辑设计
package com.example.calculater;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.math.*;
import java.text.DecimalFormat;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
//第一排
private Button ButtonC;
private Button ButtonCE;
private Button ButtonRight;
private Button ButtonAdd;
//第二排
private Button Button1;
private Button Button2;
private Button Button3;
private Button ButtonSub;
//第三排
private Button Button4;
private Button Button5;
private Button Button6;
private Button ButtonMul;
//第四排
private Button Button7;
private Button Button8;
private Button Button9;
private Button ButtonDiv;
//第五排
private Button ButtonP;
private Button Button0;
private Button ButtonAS;
private Button ButtonEqual;
//显示文本框
private EditText EditText1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//第一排
View ButtonC=findViewById(R.id.ButtonC);
View ButtonCE=findViewById(R.id.ButtonCE);
View ButtonRight=findViewById(R.id.ButtonRight);
View ButtonAdd=findViewById(R.id.ButtonAdd);
//第二排
View Button1=findViewById(R.id.Button1);
View Button2=findViewById(R.id.Button2);
View Button3=findViewById(R.id.Button3);
View ButtonSub=findViewById(R.id.ButtonSub);
//第三排
View Button4=findViewById(R.id.Button4);
View Button5=findViewById(R.id.Button5);
View Button6=findViewById(R.id.Button6);
View ButtonMul=findViewById(R.id.ButtonMul);
//第四排
View Button7=findViewById(R.id.Button7);
View Button8=findViewById(R.id.Button8);
View Button9=findViewById(R.id.Button9);
View ButtonDiv=findViewById(R.id.ButtonDiv);
//第五排
View ButtonP=findViewById(R.id.ButtonP);
View Button0=findViewById(R.id.Button0);
View ButtonAS=findViewById(R.id.ButtonAS);
View ButtonEqual=findViewById(R.id.ButtonEqual);
//显示文本框
EditText1=(EditText) findViewById(R.id.EditText1);
// EditText EditText1 = findViewById(R.id.EditText1);这样写错误因为这个方法返回View
//添加事件
//第一排
ButtonC.setOnClickListener(this);
ButtonCE.setOnClickListener(this);
ButtonRight.setOnClickListener(this);
ButtonAdd.setOnClickListener(this);
//第二排
Button1.setOnClickListener(this);
Button2.setOnClickListener(this);
Button3.setOnClickListener(this);
ButtonSub.setOnClickListener(this);
//第三排
Button4.setOnClickListener(this);
Button5.setOnClickListener(this);
Button6.setOnClickListener(this);
ButtonMul.setOnClickListener(this);
//第四排
Button7.setOnClickListener(this);
Button8.setOnClickListener(this);
Button9.setOnClickListener(this);
ButtonDiv.setOnClickListener(this);
//第五排
ButtonP.setOnClickListener(this);
Button0.setOnClickListener(this);
ButtonAS.setOnClickListener(this);
ButtonEqual.setOnClickListener(this);
}
@Override
public void onClick(View v) {
String input = EditText1.getText().toString();
//对数字键的处理
switch (v.getId()){
case R.id.Button0:
case R.id.Button1:
case R.id.Button2:
case R.id.Button3:
case R.id.Button4:
case R.id.Button5:
case R.id.Button6:
case R.id.Button7:
case R.id.Button8:
case R.id.Button9:
Button b1 = (Button)v;
EditText1.setText(input+b1.getText());
// EditText1.setText(input+((Button)v).getText());
break;
//对+-*/的处理
case R.id.ButtonAdd:
case R.id.ButtonSub:
case R.id.ButtonMul:
case R.id.ButtonDiv:
case R.id.ButtonRight:
Button b2 = (Button)v;
EditText1.setText(input+" "+b2.getText()+" ");
break;
//对C的处理
case R.id.ButtonC:
if(input.length()!=0){
EditText1.setText(input.substring(0,input.length()-1));
break;
}
else{
EditText1.setText("");
}
//对CE的处理
case R.id.ButtonCE:
EditText1.setText("");
break;
//对点的处理
case R.id.ButtonP:
Button b3=(Button)v;
EditText1.setText(input+b3.getText());
break;
//对=的处理
case R.id.ButtonEqual:
getResult();
break;
}
}
private void getResult(){
String edit=EditText1.getText().toString();
if(edit.equals("")||edit==null){//EditText为空
return;
}
else if(!edit.contains(" ")){//EditText不包括“ ”即运算符
return;
}
//对EditText的处理
String p=edit.substring(edit.indexOf(" ")+1,edit.indexOf(" ")+2);
String s1="",s2="";
if(edit.indexOf(" ") < edit.length() && edit.indexOf(" ")!=0){
s1=edit.substring(0,edit.indexOf(" "));
if(edit.indexOf(" ")+3 < edit.length()){
s2=edit.substring(edit.indexOf(" ")+3);
}
else{
EditText1.setText(s1);
return;
}
}
else if(edit.indexOf(" ")+3 < edit.length()){
s2=edit.substring(edit.indexOf(" ")+3);
if(p.equals("+")){
EditText1.setText("+"+s2);
return;
}
else if(p.equals("-")){
EditText1.setText("-"+s2);
return;
}
else if(p.equals("√")){
EditText1.setText(Math.sqrt(Double.parseDouble(s2))+"");
return;
}
else{
EditText1.setText("");
return;
}
}
else{
EditText1.setText("");
return;
}
double result=0;
int iresult=0;
if(s1.contains(".")||s2.contains(".")){//对小数处理
double d1=Double.parseDouble(s1);
double d2=Double.parseDouble(s2);
if(p.equals("+")){
result=d1+d2;
}
else if(p.equals("-")){
result=d1-d2;
}
else if(p.equals("*")){
BigDecimal b1 = new BigDecimal(Double.toString(d1));
BigDecimal b2 = new BigDecimal(Double.toString(d2));
result=b1.multiply(b2).doubleValue();
}
else if(p.equals("/")){
if(d2!=0){
result=d1/d2;
}
else{
EditText1.setText("error");
return;
}
}
EditText1.setText(result+"");
}
else{//对整数处理
int i1=Integer.parseInt(s1);
int i2=Integer.parseInt(s2);
if(p.equals("+")){
iresult=i1+i2;
}
else if(p.equals("-")){
iresult=i1-i2;
}
else if(p.equals("*")){
iresult=i1*i2;
}
else if(p.equals("/")){//整数除法处理
if(i2!=0){
if(i1%i2!=0){
double t1=i1*1.0;
double t2=i2*1.0;
double t=t1/t2;
EditText1.setText(t+"");
return;
}
else{
iresult=i1/i2;
}
}
else{
EditText1.setText("error");
return;
}
}
EditText1.setText(iresult+"");
}
}
}