用android studio写一个简单的计算器(没有bug)

   日期:2020-08-25     浏览:159    评论:0    
核心提示:目录1.效果图2布局代码3.逻辑代码4.XML文件1.效果图2布局代码

目录

    • 1.效果图
    • 2布局代码
    • 3.逻辑代码
    • 4.XML文件

1.效果图

2布局代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/jsj1">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="计算器"
        android:textSize="20dp"
        android:gravity="center"
        android:textColor="#EE4000"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="输入数字"/>
    <EditText
        android:id="@+id/ET001"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="运算结果"/>
    <EditText
        android:id="@+id/ET002"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:layout_marginLeft="5dp"
            android:id="@+id/btn001"
            android:layout_width="88dp"
            android:layout_height="100dp"
            android:text="C"
            android:textSize="20dp"
            android:padding="5dp"
            android:background="@drawable/qqqqqqqqqq"/>
        <Button
            android:id="@+id/btn002"
            android:layout_width="88dp"
            android:layout_height="100dp"
            android:text="÷"
            android:textSize="20dp"
            android:padding="5dp"
            android:background="@drawable/qqqqqqqqqq"/>

        <Button
            android:id="@+id/btn003"
            android:layout_width="88dp"
            android:layout_height="100dp"
            android:text="×"
            android:textSize="20dp"
            android:padding="5dp"
            android:background="@drawable/qqqqqqqqqq"/>
        <Button
            android:id="@+id/btn004"
            android:layout_width="88dp"
            android:layout_height="100dp"
            android:text="Cx"
            android:textSize="20dp"
            android:padding="5dp"
            android:background="@drawable/qqqqqqqqqq"/>

    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:layout_marginLeft="5dp"
            android:id="@+id/btn005"
            android:layout_width="88dp"
            android:layout_height="100dp"
            android:text="7"
            android:textSize="20dp"
            android:padding="5dp"
            android:background="@drawable/sssssssssssssss"/>
        <Button
            android:id="@+id/btn006"
            android:layout_width="88dp"
            android:layout_height="100dp"
            android:text="8"
            android:textSize="20dp"
            android:padding="5dp"
            android:background="@drawable/sssssssssssssss"/>
        <Button
            android:id="@+id/btn007"
            android:layout_width="88dp"
            android:layout_height="100dp"
            android:text="9"
            android:textSize="20dp"
            android:padding="5dp"
            android:background="@drawable/sssssssssssssss"/>
        <Button
            android:id="@+id/btn008"
            android:layout_width="88dp"
            android:layout_height="100dp"
            android:text="-"
            android:textSize="20dp"
            android:padding="5dp"
            android:background="@drawable/qqqqqqqqqq"/>

    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:layout_marginLeft="5dp"
            android:id="@+id/btn009"
            android:layout_width="88dp"
            android:layout_height="100dp"
            android:text="4"
            android:textSize="20dp"
            android:padding="5dp"
            android:background="@drawable/sssssssssssssss"/>
        <Button
            android:id="@+id/btn0010"
            android:layout_width="88dp"
            android:layout_height="100dp"
            android:text="5"
            android:textSize="20dp"
            android:padding="5dp"
            android:background="@drawable/sssssssssssssss"/>
        <Button
            android:id="@+id/btn0011"
            android:layout_width="88dp"
            android:layout_height="100dp"
            android:text="6"
            android:textSize="20dp"
            android:padding="5dp"
            android:background="@drawable/sssssssssssssss"/>
        <Button
            android:id="@+id/btn0012"
            android:layout_width="88dp"
            android:layout_height="100dp"
            android:text="+"
            android:textSize="20dp"
            android:padding="5dp"
            android:background="@drawable/qqqqqqqqqq"/>

    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:layout_marginLeft="5dp"
            android:id="@+id/btn0013"
            android:layout_width="88dp"
            android:layout_height="100dp"
            android:text="1"
            android:textSize="20dp"
            android:padding="5dp"
            android:background="@drawable/sssssssssssssss"/>
        <Button
            android:id="@+id/btn0014"
            android:layout_width="88dp"
            android:layout_height="100dp"
            android:text="2"
            android:textSize="20dp"
            android:padding="5dp"
            android:background="@drawable/sssssssssssssss"/>
        <Button
            android:id="@+id/btn0015"
            android:layout_width="88dp"
            android:layout_height="100dp"
            android:text="3"
            android:textSize="20dp"
            android:padding="5dp"
            android:background="@drawable/sssssssssssssss"/>
        <Button
            android:id="@+id/btn0019"
            android:layout_width="88dp"
            android:layout_height="100dp"
            android:text="."
            android:textSize="20dp"
            android:padding="5dp"
            android:background="@drawable/qqqqqqqqqq"/>

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:layout_marginLeft="5dp"
            android:id="@+id/btn0018"
            android:layout_width="88dp"
            android:layout_height="100dp"
            android:text="0"
            android:textSize="20dp"
            android:padding="5dp"
            android:background="@drawable/sssssssssssssss"/>
        <Button
            android:id="@+id/btn0016"
            android:layout_width="265dp"
            android:layout_height="100dp"
            android:text="="
            android:textSize="20dp"
            android:padding="5dp"
            android:background="#6495ED"/>



    </LinearLayout>
</LinearLayout>

3.逻辑代码

package com.example.myzhuoye;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

public class JiSuanJi extends AppCompatActivity implements View.OnClickListener {
    //结果
    private EditText ET001,ET002;
    //数字0-9
    private Button btn0018, btn0013,btn0014,btn0015,btn009,btn0010,btn0011,btn005,btn006,btn007;
    //运算符,+,-,×,÷,.,=;清除,返回
    private Button btn0012,btn008,btn003,btn002,btn0019,btn0016,btn001,btn004;
    private String text = "";//保存输入的数字和符号
    private Double result = 0.0;//输出结果


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout4);
        //结果
        ET001=(EditText)findViewById(R.id.ET001);
        ET002=(EditText)findViewById(R.id.ET002);
        //数字0-9
        btn0013=(Button)findViewById(R.id.btn0013);
        btn0014=(Button)findViewById(R.id.btn0014);
        btn0015=(Button)findViewById(R.id.btn0015);
        btn009=(Button)findViewById(R.id.btn009);
        btn0010=(Button)findViewById(R.id.btn0010);
        btn0011=(Button)findViewById(R.id.btn0011);
        btn005=(Button)findViewById(R.id.btn005);
        btn006=(Button)findViewById(R.id.btn006);
        btn007=(Button)findViewById(R.id.btn007);
        btn0018=(Button)findViewById(R.id.btn0018);
        //运算符
        btn004=(Button)findViewById(R.id.btn004);
        btn0012=(Button)findViewById(R.id.btn0012);
        btn008=(Button)findViewById(R.id.btn008);
        btn003=(Button)findViewById(R.id.btn003);
        btn002=(Button)findViewById(R.id.btn002);
        btn0019=(Button)findViewById(R.id.btn0019);
        btn0016=(Button)findViewById(R.id.btn0016);
        btn001=(Button)findViewById(R.id.btn001);
        //添加点击事件
        btn0013.setOnClickListener((View.OnClickListener) this);
        btn0014.setOnClickListener((View.OnClickListener) this);
        btn0015.setOnClickListener((View.OnClickListener) this);
        btn009.setOnClickListener((View.OnClickListener) this);
        btn0010.setOnClickListener((View.OnClickListener) this);

        btn0011.setOnClickListener((View.OnClickListener) this);
        btn005.setOnClickListener((View.OnClickListener) this);
        btn006.setOnClickListener((View.OnClickListener) this);
        btn007.setOnClickListener((View.OnClickListener) this);
        btn0018.setOnClickListener((View.OnClickListener) this);

        btn0012.setOnClickListener((View.OnClickListener) this);
        btn008.setOnClickListener((View.OnClickListener) this);
        btn003.setOnClickListener((View.OnClickListener) this);
        btn002.setOnClickListener((View.OnClickListener) this);
        btn0019.setOnClickListener((View.OnClickListener) this);

        btn0016.setOnClickListener((View.OnClickListener) this);
        btn001.setOnClickListener((View.OnClickListener) this);
        btn004.setOnClickListener((View.OnClickListener) this);
    }

    @Override
    public void onClick(View v) {
        String string=ET001.getText().toString();
        switch (v.getId()){
            case R.id.btn0018://0
                num(0);
                break;
            case R.id.btn0013://1
                num(1);
                break;
            case R.id.btn0014://2
                num(2);
                break;
            case R.id.btn0015://3
                num(3);
                break;
            case R.id.btn009://4
                num(4);
                break;
            case R.id.btn0010://5
                num(5);
                break;
            case R.id.btn0011://6
                num(6);
                break;
            case R.id.btn005://7
                num(7);
                break;
            case R.id.btn006://8
                num(8);
                break;
            case R.id.btn007://9
                num(9);
                break;
            case R.id.btn0019://.
                dot();
                break;
            case R.id.btn0012://+
                add();
                break;
            case R.id.btn008://-
                sub();
                break;
            case R.id.btn003://"*"
                multiply();
                break;
            case R.id.btn002://divide();
                break;
            case R.id.btn001://清除
                clear();
                break;
            case R.id.btn004://返回
                back();
                break;
            //计算结果
            case R.id.btn0016://结果
                result();
                break;
            default:
                break;
        }
        ET001.setText(text);
        ET002.setText(String.valueOf(result));
    }
    private void num(int i) {
        text = text + String.valueOf(i);
    }

    private void dot() {

        int a=text.length();
        String s01="+";
        String s02="-";
        String s03="×";
        String s04="÷";
        String s05=".";
        if (a!=0) {
            String s=text.substring(a-1,a);
            String s0=text.substring(0,a-1);
            if (s01.equals(s) || s02.equals(s) || s03.equals(s) || s04.equals(s) || s05.equals(s)) {
                text = s0+".";
            }else {
                text += ".";
            }
        } else {
            text = "";
            result =0.0;
            ET001.setText("");
            ET002.setText("");
        }
    }

    private void clear() {

        text = "";
        result =0.0;
        ET001.setText("");
        ET002.setText("");

    }

    private void back() {
        if (text.length()!=0){
            String str = text.substring(0, text.length()-1);
            text = str;
        }

        ;

    }

    private void add() {
        int a=text.length();

        String s01="+";
        String s02="-";
        String s03="×";
        String s04="÷";
        String s05=".";
        if (a!=0) {
            String s=text.substring(a-1,a);
            String s0=text.substring(0,a-1);
            if (s01.equals(s) || s02.equals(s) || s03.equals(s) || s04.equals(s) || s05.equals(s)) {
                text = s0+"+";
            }else {
                text += "+";
            }
        } else {
            text = "";
            result =0.0;
            ET001.setText("");
            ET002.setText("");
        }

    }

    private void sub() {
        int a=text.length();
        String s01="+";
        String s02="-";
        String s03="×";
        String s04="÷";
        String s05=".";
        if (a!=0) {
            String s=text.substring(a-1,a);
            String s0=text.substring(0,a-1);
            if (s01.equals(s) || s02.equals(s) || s03.equals(s) || s04.equals(s) || s05.equals(s)) {
                text = s0+"-";
            }else {
                text += "-";
            }
        } else {
            text = "";
            result =0.0;
            ET001.setText("");
            ET002.setText("");
        }

    }

    private void multiply() {

        int a=text.length();
        String s01="+";
        String s02="-";
        String s03="×";
        String s04="÷";
        String s05=".";
        if (a!=0) {
            String s=text.substring(a-1,a);
            String s0=text.substring(0,a-1);
            if (s01.equals(s) || s02.equals(s) || s03.equals(s) || s04.equals(s) || s05.equals(s)) {
                text = s0+"×";
            }else {
                text += "×";
            }
        } else {
            text = "";
            result =0.0;
            ET001.setText("");
            ET002.setText("");
        }

    }

    private void divide() {

        int a=text.length();
        String s01="+";
        String s02="-";
        String s03="×";
        String s04="÷";
        String s05=".";
        if (a!=0) {
            String s=text.substring(a-1,a);
            String s0=text.substring(0,a-1);
            if (s01.equals(s) || s02.equals(s) || s03.equals(s) || s04.equals(s) || s05.equals(s)) {
                text = s0+"÷";
            }else {
                text += "÷";
            }
        } else {
            text = "";
            result =0.0;
            ET001.setText("");
            ET002.setText("");
        }
    }

    //计算输出结果
    private void result() {
        result = testOperation(text);
    }


    public Double testOperation(String s){
        //分割字符然后放进数组
        String s1 =s.replace("+","-");
        String[] str = s1.split("-");
        double total1=0;
        //先遍历数组,把里面的乘除结果算出来
        for(String str1:str){
            if(str1.contains("×")||str1.contains("÷")){
                double total = 0;
                for(int i =0;i<str1.length();){
                    int count =1;
                    a:for(int j =i+1;j<str1.length();j++){
                        char c =str1.charAt(j);
                        if(c=='×'||c=='÷'){
                            break a;
                        }else{
                            count++;
                        }
                    }

                    //将数字截取出来
                    String s2 =str1.substring(i,i+count);
                    double d = Double.parseDouble(s2);
                    if(i==0){
                        total = d;
                    }else{
                        char c1 = str1.charAt(i-1);
                        if(c1=='×'){
                            total*=d;
                        }else if(c1=='÷'){
                            //如果除数为0,直接返回null;
                            if(d == 0)
                                return null;
                            total/=d;
                        }
                    }
                    i+=count+1;
                }
                s= s.replace(str1, total+"");
            }
        }
        //进行加减运算
        for(int i =0;i<s.length();i++){
            int count =1;
            a:for(int j=i+1;j<s.length();j++){
                char c = s.charAt(j);
                if(c=='+'||c=='-'){
                    break a;
                }else{
                    count++;
                }
            }
            String s3= s.substring(i,i+count);
            double d2 = Double.parseDouble(s3);
            if(i==0){
                total1 = d2;
            }else{
                char c = s.charAt(i-1);
                if(c=='+'){
                    total1+=d2;
                }else if(c=='-'){
                    total1-=d2;
                }
            }
            i+=count;
        }
        return total1;
    }

}


4.XML文件

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient android:startColor="#c0000000" android:endColor="#c0000000" android:angle="90" /><!--背景颜色渐变 angle为渐变角度-->
    <solid android:color=" #8DEEEE" /><!-- 背景填充颜色 -->
    <stroke android:width="0.5dp" android:color="#ff000000" /><!-- 描边,边框宽度、颜色 -->
    <corners android:radius="0dp" /><!-- 边角圆弧的半径 -->
    <padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" /><!-- 四周留出来的空白 -->
</shape>
<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient android:startColor="#c0000000" android:endColor="#c0000000" android:angle="90" /><!--背景颜色渐变 angle为渐变角度-->
<solid android:color="#00FFFF" /><!-- 背景填充颜色 -->
<stroke android:width="0.5dp" android:color="#ff000000" /><!-- 描边,边框宽度、颜色 -->
<corners android:radius="0dp" /><!-- 边角圆弧的半径 -->
<padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" /><!-- 四周留出来的空白 -->
</shape>
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服