Android計算器(仿小米計算器)

前言:這個項目是還存在很多bug,基本上可以實現16位以下的加減乘除求餘

整個項目的完整代碼鏈接:點擊下載吧

實現思路:

首先定義標識用來判斷用戶輸入字符或非字符
在這裏插入圖片描述
再定義三個值,左值,右值,運算結果
在這裏插入圖片描述
左值只有在字符模式下才能賦值,右值只有在用戶點擊了運算符後進入非字符模式,才能進行賦值
在這裏插入圖片描述
在這裏插入圖片描述
當用戶點擊"="後,通過對左值右值進行相應運算得出最終結果,並進行文本的顯示。

一:運行效果

在這裏插入圖片描述
在這裏插入圖片描述

二:前端佈局代碼

1:二個自定義.xml

在這裏插入圖片描述
①:btn_equles.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <!-- 填充的顏色 -->
    <solid android:color="#FFF" />
    <corners
        android:radius="5dip" />
    <padding
        android:left="10dp"
        android:top="10dp"
        android:right="10dp"
        android:bottom="10dp"
        />
    <!-- 邊框的寬度,每段虛線的長度,和兩段虛線之間的間隔和顏色 -->
    <stroke
        android:width="2dp"
        android:dashWidth="6dp"
        android:dashGap="6dp"
        android:color="#e75050" />

    <!-- 填充顏色 -->
    <solid android:color="#F44336"/>
</shape>

②:button.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <!-- 填充的顏色 -->
    <solid android:color="#FFF" />
    <corners
        android:radius="5dip" />
    <padding
        android:left="10dp"
        android:top="10dp"
        android:right="10dp"
        android:bottom="10dp"
        />
    <!-- 邊框的寬度,每段虛線的長度,和兩段虛線之間的間隔和顏色 -->
    <stroke
        android:width="2dp"
        android:dashWidth="6dp"
        android:dashGap="6dp"
        android:color="#e75050" />
</shape>

2:顏色,字體,樣式

在這裏插入圖片描述
①:colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#008577</color>
    <color name="colorPrimaryDark">#00574B</color>
    <color name="colorAccent">#D81B60</color>
    <color name="black">#000</color>
    <color name="white">#fff</color>
</resources>

②:string.xml

<resources>
    <string name="app_name">Computer</string>
    <string name="c">C</string>
    <string name="division">÷</string>
    <string name="multiplication">x</string>
    <string name="back"></string>
    <string name="num_7">7</string>
    <string name="num_8">8</string>
    <string name="num_9">9</string>
    <string name="subtraction">-</string>
    <string name="num_4">4</string>
    <string name="num_5">5</string>
    <string name="Add">+</string>
    <string name="num_6">6</string>
    <string name="num_1">1</string>
    <string name="num_2">2</string>
    <string name="num_3">3</string>
    <string name="little">.</string>
    <string name="num_0">0</string>
    <string name="seekSurplus">%</string>
    <string name="equals">=</string>
</resources>

③:styles.xml

<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
<style name="ButtonStyle" >
    <item name="android:textColor">@color/black</item>
    <item name="android:background">@drawable/button</item>
    <item name="android:radius">10dp</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textSize">25sp</item>
    <item name="android:borderlessButtonStyle">@style/TextAppearance.AppCompat.Body1</item>
</style>
<style name="arithmeticStyle">
    <item name="android:textColor">#F44336</item>
    <item name="android:background">@drawable/button</item>
    <item name="android:radius">10dp</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textSize">25sp</item>
    <item name="android:borderlessButtonStyle">@style/TextAppearance.AppCompat.Body1</item>
</style>
</resources>

2:activity.xml佈局代碼

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#404040">

    <Button
        android:id="@+id/btn_c"
        style="@style/arithmeticStyle"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:text="@string/c"
        app:layout_constraintBottom_toTopOf="@+id/btn_num7"
        app:layout_constraintEnd_toStartOf="@+id/btn_div"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/content1" />

    <Button
        android:id="@+id/btn_div"
        style="@style/arithmeticStyle"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:text="@string/division"
        app:layout_constraintBottom_toTopOf="@+id/btn_num8"
        app:layout_constraintEnd_toStartOf="@+id/btn_Mul"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/btn_c"
        app:layout_constraintTop_toBottomOf="@+id/content1" />

    <Button
        android:id="@+id/btn_Mul"
        style="@style/arithmeticStyle"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:text="@string/multiplication"
        app:layout_constraintBottom_toTopOf="@+id/btn_num9"
        app:layout_constraintEnd_toStartOf="@+id/btn_back"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/btn_div"
        app:layout_constraintTop_toBottomOf="@+id/content1" />

    <Button
        android:id="@+id/btn_back"
        style="@style/arithmeticStyle"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:text="@string/back"
        app:layout_constraintBottom_toTopOf="@+id/btn_sub"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/btn_Mul"
        app:layout_constraintTop_toBottomOf="@+id/content1" />

    <Button
        android:id="@+id/btn_num7"
        style="@style/ButtonStyle"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:text="@string/num_7"
        app:layout_constraintBottom_toTopOf="@+id/btn_num4"
        app:layout_constraintEnd_toStartOf="@+id/btn_num8"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btn_c" />

    <Button
        android:id="@+id/btn_num8"
        style="@style/ButtonStyle"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:text="@string/num_8"
        app:layout_constraintBottom_toTopOf="@+id/btn_num6"
        app:layout_constraintEnd_toStartOf="@+id/btn_num9"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/btn_num7"
        app:layout_constraintTop_toBottomOf="@+id/btn_div" />

    <Button
        android:id="@+id/btn_num9"
        style="@style/ButtonStyle"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:text="@string/num_9"
        app:layout_constraintBottom_toTopOf="@+id/btn_num5"
        app:layout_constraintEnd_toStartOf="@+id/btn_sub"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/btn_num8"
        app:layout_constraintTop_toBottomOf="@+id/btn_Mul" />

    <Button
        android:id="@+id/btn_sub"
        style="@style/arithmeticStyle"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:text="@string/subtraction"
        app:layout_constraintBottom_toTopOf="@+id/btn_add"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/btn_num9"
        app:layout_constraintTop_toBottomOf="@+id/btn_back" />

    <Button
        android:id="@+id/btn_num4"
        style="@style/ButtonStyle"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:text="@string/num_4"
        app:layout_constraintBottom_toTopOf="@+id/btn_num1"
        app:layout_constraintEnd_toStartOf="@+id/btn_num6"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btn_num7" />

    <Button
        android:id="@+id/btn_num5"
        style="@style/ButtonStyle"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:text="@string/num_6"
        app:layout_constraintBottom_toTopOf="@+id/btn_num3"
        app:layout_constraintEnd_toStartOf="@+id/btn_add"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/btn_num6"
        app:layout_constraintTop_toBottomOf="@+id/btn_num9" />

    <Button
        android:id="@+id/btn_num6"
        style="@style/ButtonStyle"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:text="@string/num_5"
        app:layout_constraintBottom_toTopOf="@+id/btn_num2"
        app:layout_constraintEnd_toStartOf="@+id/btn_num5"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/btn_num4"
        app:layout_constraintTop_toBottomOf="@+id/btn_num8" />

    <Button
        android:id="@+id/btn_add"
        style="@style/arithmeticStyle"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:text="@string/Add"
        app:layout_constraintBottom_toTopOf="@+id/btn_equles"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/btn_num5"
        app:layout_constraintTop_toBottomOf="@+id/btn_sub" />

    <Button
        android:id="@+id/btn_num1"
        style="@style/ButtonStyle"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:text="@string/num_1"
        app:layout_constraintBottom_toTopOf="@+id/btn_little"
        app:layout_constraintEnd_toStartOf="@+id/btn_num2"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btn_num4" />

    <Button
        android:id="@+id/btn_num2"
        style="@style/ButtonStyle"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:text="@string/num_2"
        app:layout_constraintBottom_toTopOf="@+id/btn_num0"
        app:layout_constraintEnd_toStartOf="@+id/btn_num3"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/btn_num1"
        app:layout_constraintTop_toBottomOf="@+id/btn_num6" />

    <Button
        android:id="@+id/btn_num3"
        style="@style/ButtonStyle"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:text="@string/num_3"
        app:layout_constraintBottom_toTopOf="@+id/btn_Seek"
        app:layout_constraintEnd_toStartOf="@+id/btn_equles"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/btn_num2"
        app:layout_constraintTop_toBottomOf="@+id/btn_num5" />

    <Button
        android:background="@drawable/btn_equles"
        android:id="@+id/btn_equles"
        style="@style/arithmeticStyle"
        android:layout_width="90dp"
        android:layout_height="198dp"
        android:text="@string/equals"
        android:textColor="#FFF"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/btn_Seek"
        app:layout_constraintTop_toBottomOf="@+id/btn_add" />

    <Button
        android:id="@+id/btn_little"
        style="@style/ButtonStyle"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:text="@string/little"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/btn_num0"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btn_num1" />

    <Button
        android:id="@+id/btn_num0"
        style="@style/ButtonStyle"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:text="@string/num_0"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/btn_Seek"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/btn_little"
        app:layout_constraintTop_toBottomOf="@+id/btn_num2" />


    <Button
        android:id="@+id/btn_Seek"
        style="@style/arithmeticStyle"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:text="@string/seekSurplus"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/btn_equles"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/btn_num0"
        app:layout_constraintTop_toBottomOf="@+id/btn_num3" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline9"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.31874144" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline10"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.45690835" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline11"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.59370726" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline12"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_begin="532dp" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline13"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_begin="625dp" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline14"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_begin="723dp" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.16" />

    <TextView
        android:id="@+id/content2"
        android:layout_width="397dp"
        android:layout_height="117dp"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="8dp"
        android:gravity="bottom|end"
        android:textSize="100sp"
        app:layout_constraintBottom_toTopOf="@+id/guideline3"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/content1"
        android:layout_width="397dp"
        android:layout_height="109dp"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="8dp"
        android:gravity="bottom|end"
        android:hint="@string/num_0"
        android:textSize="100sp"
        app:layout_constraintBottom_toTopOf="@+id/guideline9"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/content2" />

</androidx.constraintlayout.widget.ConstraintLayout>

三:後端佈局代碼

package cn.cg.computer;
import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import java.math.BigDecimal;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button btn_0,btn_1,btn_2,btn_3,btn_4,btn_5,btn_6,btn_7,btn_8,btn_9;
    private  Button btn_add,btn_c,btn_back,btn_division,btn_equle,btn_mul,btn_seek,btn_sub,btn_little;
    private TextView content1,content2;
    //輸入爲字符
    public static final int INPUT_NUMBER = 1;
    //輸入爲非字符
    public  static  final  int INPUT_NONNUMBER=2;
    private int lastTimeInput = INPUT_NUMBER; //記錄上一次輸入狀態
    //左值,右值,運算結果
    private     String result_Left=" ",result_Right=" ",result=" ";
    //定義運算表示(+,-,*,/,%)
    private  String Tage="0";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        InitView();
    }

    //初始綁定控件
    @SuppressLint("WrongViewCast")
    private  void InitView()
    {
        //找到前端對應控件的位置
        btn_0= findViewById(R.id.btn_num0);
        btn_1=findViewById(R.id.btn_num1);
        btn_2=findViewById(R.id.btn_num2);
        btn_3=findViewById(R.id.btn_num3);
        btn_4=findViewById(R.id.btn_num4);
        btn_5=findViewById(R.id.btn_num5);
        btn_6=findViewById(R.id.btn_num6);
        btn_7=findViewById(R.id.btn_num7);
        btn_8=findViewById(R.id.btn_num8);
        btn_9=findViewById(R.id.btn_num9);
        //加法
        btn_add=findViewById(R.id.btn_add);
        //清零
        btn_c=findViewById(R.id.btn_c);
        //回退一格
        btn_back=findViewById(R.id.btn_back);
        //除法
        btn_division=findViewById(R.id.btn_div);
        //等號
        btn_equle=findViewById(R.id.btn_equles);
        //乘法
        btn_mul=findViewById(R.id.btn_Mul);
        //求餘
        btn_seek=findViewById(R.id.btn_Seek);
        //減法
        btn_sub=findViewById(R.id.btn_sub);
        //小數點
        btn_little=findViewById(R.id.btn_little);
        //顯示運行結果內容
        content1=findViewById(R.id.content1);
        content2=findViewById(R.id.content2);
        //設置監聽事件
        setOnClickListener();
    }

    //設置監聽器
    private void setOnClickListener() {
        btn_0.setOnClickListener(this);
        btn_1.setOnClickListener(this);
        btn_2.setOnClickListener(this);
        btn_3.setOnClickListener(this);
        btn_4.setOnClickListener(this);
        btn_5.setOnClickListener(this);
        btn_6.setOnClickListener(this);
        btn_7.setOnClickListener(this);
        btn_8.setOnClickListener(this);
        btn_9.setOnClickListener(this);
        btn_add.setOnClickListener(this);
        btn_back.setOnClickListener(this);
        btn_division.setOnClickListener(this);
        btn_equle.setOnClickListener(this);
        btn_mul.setOnClickListener(this);
        btn_seek.setOnClickListener(this);
        btn_sub.setOnClickListener(this);
        btn_c.setOnClickListener(this);
        btn_little.setOnClickListener(this);
    }

    //重寫onClick方法
    @Override
    public void onClick(View v) {
        //判斷運算框長度是否等於7,如果等於就設置字體大小
        if (content2.getText().toString().trim().length()>=4) {
            content2.setTextSize(40);
        }else {
            content2.setTextSize(80);
        }
        //通過按鈕id實現多控件的監聽
        switch(v.getId()){
            case R.id.btn_add:
                arithmetic("+");
                break;
            case R.id.btn_c:
                clearText();
                break;
            case R.id.btn_back:
                back();
                break;
            case R.id.btn_div:
                arithmetic("/");
                break;
            case R.id.btn_equles:
                equle();
                break;
            case R.id.btn_Mul:
                arithmetic("*");
                break;
            case R.id.btn_Seek:
                arithmetic("%");
                break;
            case  R.id.btn_sub:
                arithmetic("-");
                break;
            case R.id.btn_little:
                getlittle(v);
                break;
            default:
                inputNumber(v);
                break;
        }
    }

    //回退鍵
    private void back() {
        //判斷運算窗口是否有內容
        if (!content2.getText().toString().trim().isEmpty()){
            //判斷Tage如果爲0表示只有左值
            if (!Tage.contains("0")){
                if (content2.getText().toString().trim().length()==content2.getText().toString().trim().lastIndexOf(Tage)+1){
                    result_Left=content2.getText().toString().trim().substring(0,content2.getText().toString().trim().lastIndexOf(Tage));
                    content2.setText(result_Left );
                    //resultLeft T:形式
                    lastTimeInput=INPUT_NUMBER;
                    Tage="0";
                }else  if (content2.getText().toString().trim().length()>content2.getText().toString().trim().lastIndexOf(Tage)+1){
                    //resultLeft T resultRight:形式
                    result_Right=content2.getText().toString().trim().substring(content2.getText().toString().trim().lastIndexOf(Tage),content2.getText().toString().trim().length()-1);
                    content2.setText(content2.getText().toString().trim().substring(0,content2.getText().toString().trim().length()-1));
                }
            }else {
                //result_Left
                if (content2.getText().toString().trim().length() == 1) {
                    content2.setText("0");
                    result_Left = "0";
                }else {
                    result_Left=content2.getText().toString().trim().substring(0,content2.getText().toString().trim().length()-1);
                    content2.setText(result_Left);
                }

            }
        }
    }

    //用戶點擊運算符號
    private void arithmetic(String t) {
        //設置標記
         Tage=t;
        if (!content1.getText().toString().trim().isEmpty()){
            lastTimeInput=INPUT_NONNUMBER;
            if (content2.getText().toString().trim().isEmpty()){
                result_Left=result;
                content2.setText(result_Left+t);
            }else{
                //表示LeftValue+"."形式去掉"."
                if (content2.getText().toString().trim().lastIndexOf(".")+1==content2.getText().toString().trim().length()){
                    result_Left=content2.getText().toString().trim().substring(0,content2.getText().toString().trim().length()-1);
                    content2.setText(result_Left);
                }
                //判斷運算框中是否有負號
                if (content2.getText().toString().trim().contains("-"))
                {
                    //在首位表示負數可以
                    if (content2.getText().toString().trim().lastIndexOf("-")==0)
                    {
                        content2.setText(result_Left+t);
                    }
                }
                if (!content2.getText().toString().trim().contains(Tage))
                {
                    content2.setText(result_Left+t);
                }
            }
        }else {
            lastTimeInput=INPUT_NUMBER;
        }
    }


    //用戶點擊等於,進行運算
    private void equle() {
        try {
            content2.setTextSize(40);
            content1.setTextSize(80);
            double finaloutcome=0.0;
            int seek=0;
            if (content2.getText().toString().trim().contains("+"))
            {
                finaloutcome=add(Double.valueOf(result_Left.trim()),Double.valueOf(result_Right.trim()));
            }else if (content2.getText().toString().trim().contains("-"))
            {
                finaloutcome=sub(Double.valueOf(result_Left.trim()),Double.valueOf(result_Right.trim()));
            }else if (content2.getText().toString().trim().contains("*"))
            {
                finaloutcome=mul(Double.valueOf(result_Left.trim()),Double.valueOf(result_Right.trim()));
            }else if (content2.getText().toString().trim().contains("/"))
            {
                finaloutcome=div(Double.valueOf(result_Left.trim()),Double.valueOf(result_Right.trim()));
            } else if (content2.getText().toString().trim().contains("%")) {
                finaloutcome=Double.valueOf(result_Left.trim())%Double.valueOf(result_Right.trim());
                seek=(int) finaloutcome;
            }else{
                Toast.makeText(MainActivity.this,"出現異常",Toast.LENGTH_LONG);
                return;
            }
            if (content2.getText().toString().trim().contains("%")){
                  result=Integer.toString(seek);
                content1.setText(result);
            }else{
                if (!result_Left.contains(".")&&!result_Right.contains(".")&&!content2.getText().toString().trim().contains("/"))
                {
                    result=Integer.toString((int)finaloutcome);
                    content1.setText(result);
                }else
                {
                    result=Double.toString(finaloutcome);
                    content1.setText(result);
                }
            }
            lastTimeInput=INPUT_NUMBER;
              result_Left=" ";
              result_Right=" ";
            content2.setText("");
        }catch (Exception ex)
        {
            Toast.makeText(MainActivity.this,ex.toString(),Toast.LENGTH_LONG).show();
        }

    }



    //小數點
    private void getlittle(View v) {
        String little_str=((Button)v).getText().toString().trim();
        if (lastTimeInput==INPUT_NUMBER){
            if (content1.getText().toString().trim().isEmpty()){
                result_Left="0.";
            }else if (!result_Left.contains(".")){
                result_Left+=little_str;
            }
            result=result_Left;
            content1.setText("="+result);
            content2.setText(result_Left);
        }
    }

    //按C鍵,清空所有消息
    private void clearText() {
          Tage="0";
           result_Left="";
           result_Right="";
           lastTimeInput=INPUT_NUMBER;
          content2.setText(" ");
          content1.setTextSize(80);
         content1.setText("");
    }

    //數字的輸入
    private void inputNumber(View v) {
        //用戶點擊設置結果框字體爲40sp
        content1.setTextSize(40);
        //獲取按鈕上的文本
        String  key=((Button)v).getText().toString();
        //數字模式輸入
         if (lastTimeInput==INPUT_NUMBER){
             if (result_Left.trim().isEmpty())
             {
                 result_Left=key;
             }else
             {
                 //首位是否爲0
                 if (result_Left.startsWith("0")&&result_Left.trim().length()==1){
                     result_Left=key;
                 }else {
                     result_Left+=key;
                 }
             }
             result=result_Left;
             content1.setText("="+result);
             content2.setText(result_Left);
         }else
         {
             //右邊賦值
             if (result_Right.trim().isEmpty())
             {
                 result_Right=key;
             }else
             {
                 //首位是否爲0
                 if (result_Right.startsWith("0")&&result_Right.trim().length()==1){
                     result_Right=key;
                 }else {
                     result_Right+=key;
                 }
             }
             content2.setText(content2.getText().toString().trim().substring(0,result_Left.length()+1)+result_Right);
         }


    }

    /*
      用戶退出軟件,彈出提示框
     */

    @Override
    public void onBackPressed() {
        //設置提示框顯示
        AlertDialog.Builder  builder=new AlertDialog.Builder(MainActivity.this);
        builder.setTitle("提示")
                .setIcon(R.drawable.warn)
                .setMessage("你確定要退出?")
                .setPositiveButton("確定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //退出程序
                        MainActivity.this.finish();
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //取消提示框
                      dialog.dismiss();
                    }
                });
        AlertDialog dialog= builder.create();
        dialog.show();
    }

    /*
          計算:加減乘除
         */
    public static Double div(Double v1, Double v2) {
        BigDecimal b1 = new BigDecimal(v1.toString());
        BigDecimal b2 = new BigDecimal(v2.toString());
        return b1.divide(b2, 10, 4).doubleValue();
    }

    public static Double sub(Double v1, Double v2) {
        BigDecimal b1 = new BigDecimal(v1.toString());
        BigDecimal b2 = new BigDecimal(v2.toString());
        return b1.subtract(b2).doubleValue();
    }

    public static Double add(Double v1, Double v2) {
        BigDecimal b1 = new BigDecimal(v1.toString());
        BigDecimal b2 = new BigDecimal(v2.toString());
        return b1.add(b2).doubleValue();
    }

    public static Double mul(Double v1, Double v2) {
        BigDecimal b1 = new BigDecimal(v1.toString());
        BigDecimal b2 = new BigDecimal(v2.toString());
        return b1.multiply(b2).doubleValue();
    }
}

四:bug詳情

(先記錄等有空再做修改)
1:進行運算後點擊"."出現bug(小數點要進行相應的驗證)
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

2:超過16位後出現運算結果不對的bug
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章