用android studio写一个简单的计算器

先来个效果图:
在这里插入图片描述

功能: 满足加减乘除四则运算规则,有回退、清除功能。
下面的代码只是完成基本功能,若添加背景图请看Android Studio App设置背景图片

content_main.xml文件(页面布局,content_main.xml代码包含在activity_main.xml文件中):

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/next"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".MainActivity"
    tools:showIn="@layout/activity_main">

    <!--<TextView-->
        <!--android:layout_width="wrap_content"-->
        <!--android:layout_height="wrap_content"-->
        <!--android:text="Hello World!"-->
        <!--app:layout_constraintBottom_toBottomOf="parent"-->
        <!--app:layout_constraintLeft_toLeftOf="parent"-->
        <!--app:layout_constraintRight_toRightOf="parent"-->
        <!--app:layout_constraintTop_toTopOf="parent" />-->



    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >


    <EditText
        android:id="@+id/input"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:editable="false"
        android:hint="@string/shuru" />

    <EditText
        android:id="@+id/output"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:layout_gravity="center"
        android:editable="true"
        android:gravity="right"
        android:hint="@string/shuchu" />

    <RelativeLayout
        android:layout_width="350dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center">

        <Button
            android:id="@+id/clear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:text="@string/clear"
            android:textSize="40sp" />

        <Button
            android:id="@+id/back"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/clear"
            android:text="@string/back"
            android:textSize="40sp" />

        <Button
            android:id="@+id/divide"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/back"
            android:text="@string/divide"
            android:textSize="40sp" />

        <Button
            android:id="@+id/multiply"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/divide"
            android:text="@string/multiply"
            android:textSize="40sp" />

        <Button
            android:id="@+id/seven"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@id/clear"
            android:text="@string/seven"
            android:textSize="40sp" />

        <Button
            android:id="@+id/eight"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/seven"
            android:layout_below="@id/divide"
            android:text="@string/eight"
            android:textSize="40sp" />

        <Button
            android:id="@+id/nine"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/multiply"
            android:layout_toRightOf="@id/eight"
            android:text="@string/nine"
            android:textSize="40sp" />

        <Button
            android:id="@+id/subtract"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_below="@id/multiply"
            android:layout_toRightOf="@id/nine"
            android:text="@string/subtract"
            android:textSize="40sp" />

        <Button
            android:id="@+id/four"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@id/seven"
            android:text="@string/four"
            android:textSize="40sp" />

        <Button
            android:id="@+id/five"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/eight"
            android:layout_toRightOf="@id/four"
            android:text="@string/five"
            android:textSize="40sp" />

        <Button
            android:id="@+id/six"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/nine"
            android:layout_toRightOf="@id/five"
            android:text="@string/six"
            android:textSize="40sp" />

        <Button
            android:id="@+id/add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_below="@id/subtract"
            android:layout_toRightOf="@id/six"
            android:text="@string/add"
            android:textSize="40sp" />

        <Button
            android:id="@+id/one"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"

            android:layout_below="@id/four"
            android:text="@string/one"
            android:textSize="40sp" />

        <Button
            android:id="@+id/two"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/five"
            android:layout_toRightOf="@id/one"
            android:text="@string/two"
            android:textSize="40sp" />

        <Button
            android:id="@+id/three"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/six"
            android:layout_toRightOf="@id/two"
            android:text="@string/three"
            android:textSize="40sp" />

        <Button
            android:id="@+id/result"
            android:layout_width="wrap_content"
            android:layout_height="146dp"
            android:layout_alignParentRight="true"
            android:layout_below="@id/add"
            android:layout_toRightOf="@id/three"
            android:text="@string/result"
            android:textSize="40sp" />


        <Button
            android:id="@+id/zero"
            android:layout_width="175dp"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@id/one"
            android:text="@string/zero"
            android:textSize="40sp" />

        <Button
            android:id="@+id/dot"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/three"
            android:layout_toRightOf="@id/zero"
            android:text="@string/dot"
            android:textSize="40sp" />

    </RelativeLayout>

    </LinearLayout>


</android.support.constraint.ConstraintLayout>

strings.xml(content_main.xml代码中的一些变量在此代码中定义的):

<resources>
    <string name="app_name">Calculator</string>
    <string name="action_settings">Settings</string>
    <string name="title_activity_page2">page2</string>

    <string name="next">下一页</string>
    <string name="zero">0</string>
    <string name="one">1</string>
    <string name="two">2</string>
    <string name="three">3</string>
    <string name="four">4</string>
    <string name="five">5</string>
    <string name="six">6</string>
    <string name="seven">7</string>
    <string name="eight">8</string>
    <string name="nine">9</string>
    <string name="add">+</string>
    <string name="subtract">-</string>
    <string name="multiply">*</string>
    <string name="divide">/</string>
    <string name="clear">CE</string>
    <string name="back">&#60;-</string>
    <string name="result">=</string>
    <string name="shuru">请输入:</string>
    <string name="shuchu">结果:</string>
    <string name="dot">.</string>
    <string name="resultText">计算式</string>

</resources>

MainActivity.Java(计算器中实现计算功能的核心代码):

package com.example.dell.calculator;

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;

import android.app.Activity;
import android.content.Context;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Button;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class MainActivity extends AppCompatActivity {

    private EditText output = null;
    private EditText input = null;
    private Button btn0 = null;
    private Button btn1 = null;
    private Button btn2 = null;
    private Button btn3 = null;
    private Button btn4 = null;
    private Button btn5 = null;
    private Button btn6 = null;
    private Button btn7 = null;
    private Button btn8 = null;
    private Button btn9 = null;
    private Button btnadd = null;
    private Button btnsubtract = null;
    private Button btnmultiply = null;
    private Button btndivide = null;
    private Button btnclear = null;
    private Button btnback = null;
    private Button btndot = null;
    private Button btnresult = null;

    private String text = "";//保存输入的数字和符号
    private Double result = 0.0;//输出结果

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        output = (EditText) findViewById(R.id.output);
        input = (EditText) findViewById(R.id.input);

        btn0 = (Button) findViewById(R.id.zero);
        btn1 = (Button) findViewById(R.id.one);
        btn2 = (Button) findViewById(R.id.two);
        btn3 = (Button) findViewById(R.id.three);
        btn4 = (Button) findViewById(R.id.four);
        btn5 = (Button) findViewById(R.id.five);
        btn6 = (Button) findViewById(R.id.six);
        btn7 = (Button) findViewById(R.id.seven);
        btn8 = (Button) findViewById(R.id.eight);
        btn9 = (Button) findViewById(R.id.nine);
        btnadd = (Button) findViewById(R.id.add);
        btnsubtract = (Button) findViewById(R.id.subtract);
        btnmultiply = (Button) findViewById(R.id.multiply);
        btndivide = (Button) findViewById(R.id.divide);
        btnclear = (Button) findViewById(R.id.clear);
        btnback = (Button) findViewById(R.id.back);
        btndot = (Button) findViewById(R.id.dot);
        btnresult = (Button) findViewById(R.id.result);

        //设置按钮侦听事件
        btn0.setOnClickListener(listener);
        btn1.setOnClickListener(listener);
        btn2.setOnClickListener(listener);
        btn3.setOnClickListener(listener);
        btn4.setOnClickListener(listener);
        btn5.setOnClickListener(listener);
        btn6.setOnClickListener(listener);
        btn7.setOnClickListener(listener);
        btn8.setOnClickListener(listener);
        btn9.setOnClickListener(listener);

        btnadd.setOnClickListener(listener);
        btnsubtract.setOnClickListener(listener);
        btnmultiply.setOnClickListener(listener);
        btndivide.setOnClickListener(listener);
        btnclear.setOnClickListener(listener);
        btnback.setOnClickListener(listener);
        btndot.setOnClickListener(listener);
        btnresult.setOnClickListener(listener);


        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }


    //public void onClickNext(View view) {
    //     Intent intent = new Intent(this,page2.class);
    //     startActivity(intent);
    // }


    private OnClickListener listener = new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch (v.getId()) {
                //输入数字
                case R.id.zero:
                    num(0);
                    break;
                case R.id.one:
                    num(1);
                    break;
                case R.id.two:
                    num(2);
                    break;
                case R.id.three:
                    num(3);
                    break;
                case R.id.four:
                    num(4);
                    break;
                case R.id.five:
                    num(5);
                    break;
                case R.id.six:
                    num(6);
                    break;
                case R.id.seven:
                    num(7);
                    break;
                case R.id.eight:
                    num(8);
                    break;
                case R.id.nine:
                    num(9);
                    break;

                case R.id.dot:
                dot();
                break;
                //执行运算
                case R.id.add:
                    add();
                    break;
                case R.id.subtract:
                    sub();
                    break;
                case R.id.multiply:
                    multiply();
                    break;
                case R.id.divide:
                    divide();
                    break;
                case R.id.clear:
                    clear();
                    break;
                case R.id.back:
                    back();
                    break;
                //计算结果
                case R.id.result:
                    result();
                    break;

                default:
                    break;

            }
            input.setText(text);
            output.setText(String.valueOf(result));

        }
    };

    private void num(int i) {
        // TODO Auto-generated method stub
        text = text + String.valueOf(i);
    }

    private void dot() {
        // TODO Auto-generated method stub

        text = text + ".";
    }

    private void clear() {
        // TODO Auto-generated method stub

        text = "";
        result = null;
        input.setText("");
        output.setText("");

    }

    private void back() {
        // TODO Auto-generated method stub

        String str = text.substring(0, text.length()-1);
        text = str;

    }

    private void add() {
        // TODO Auto-generated method stub

        text += "+";

    }

    private void sub() {
        // TODO Auto-generated method stub

        text += "-";

    }

    private void multiply() {
        // TODO Auto-generated method stub

        text += "*";

    }

    private void divide() {
        // TODO Auto-generated method stub

        text += "/";
    }

    //计算输出结果
    private void result() {
        // TODO Auto-generated method stub
        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;
    }

}

猜你喜欢

转载自blog.csdn.net/qq_42591058/article/details/89415902