1. 程式人生 > >android實現的簡單的計算器(原始碼+打包好的apk檔案)

android實現的簡單的計算器(原始碼+打包好的apk檔案)

一、啥也不說,先看效果

 二、再來看一下目錄結構吧:

三、原始碼:

.java檔案

package com.kjgym.mycalculatorv10;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class CalculatorActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText EV_Result; // 結果框
    private double currentResult = 0.0;  // 儲存數字及結果
    private boolean firstDigit = true;  // 標誌使用者按的是否是整個表示式的第一個數字,或者是運算子後的第一個數字
    private String operator = "=";  // 當前運算的運算子
    private boolean operateValidFlag = true;  // 操作是否合法

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_calculator);
        // 控制元件初始化及新增監聽事件
        this.init();
    }

    /**
     * 點選事件過載方法
     * @param v 當前點選的控制元件
     */
    @Override
    public void onClick(View v) {
        String pre = ((Button) v).getText().toString();
        Log.i("TAG", pre);
        switch (v.getId()) {
            case R.id.Btn_Back:
                setBtn_Back();
                break;
            case R.id.Btn_C:
                setBtn_C();
                break;
            case R.id.Btn_Num0:
            case R.id.Btn_Num1:
            case R.id.Btn_Num2:
            case R.id.Btn_Num3:
            case R.id.Btn_Num4:
            case R.id.Btn_Num5:
            case R.id.Btn_Num6:
            case R.id.Btn_Num7:
            case R.id.Btn_Num8:
            case R.id.Btn_Num9:
            case R.id.Btn_DecimalPoint:
                setNum(pre);
                break;
            case R.id.Btn_Subtraction:
            case R.id.Btn_Addition:
            case R.id.Btn_ModuloDivision:
            case R.id.Btn_Multiplication:
            case R.id.Btn_Division:
            case R.id.Btn_Equal:
                setOperator(pre);
                break;
        }
    }

    /**
     * 點選運算子處理
     * @param label 接收當前點選的運算子
     */
    public void setOperator(String label) {
        switch (operator){
            case "/":
                // 除法運算
                // 如果當前結果文字框中的值等於0
                if (getNumFromEV_Result() == 0.0) {
                    // 操作不合法
                    operateValidFlag = false;
                    EV_Result.setText("除數不能為零!");
                } else {
                    currentResult /= getNumFromEV_Result();
                }
                break;
            case "+":
                // 加法運算
                currentResult += getNumFromEV_Result();
                break;
            case "-":
                // 減法運算
                currentResult -= getNumFromEV_Result();
                break;
            case "*":
                // 加法運算
                currentResult *= getNumFromEV_Result();
                break;
            case "%":
                // 加法運算
                currentResult %= getNumFromEV_Result();
                break;
            case "=":
                // 賦值運算
                currentResult = getNumFromEV_Result();
                break;
        }
        if (operateValidFlag) {
            // 雙精度浮點數的運算
            long t1;
            double t2;
            t1 = (long) currentResult;
            t2 = currentResult - t1;
            if (t2 == 0) {
                EV_Result.setText(String.valueOf(t1));
            } else {
                EV_Result.setText(String.valueOf(currentResult));
            }
        }
        // 運算子等於使用者按的按鈕
        operator = label;
        firstDigit = true;
        operateValidFlag = true;
    }

    /**
     * 點選數字處理
     * @param n 接收當前點選的數字
     */
    public void setNum(String n) {
        if (firstDigit) {
            // 輸入的第一個數字
            EV_Result.setText(n);
        } else if ((n.equals(".")) && (!EV_Result.getText().toString().contains("."))) {
            // 輸入的是小數點,並且之前沒有小數點,則將小數點附在結果文字框的後面
            String str = EV_Result.getText().toString();
            str += ".";
            EV_Result.setText(str);
        } else if (!n.equals(".")) {
            // 如果輸入的不是小數點,則將數字附在結果文字框的後面
            String str = EV_Result.getText().toString();
            str += n;
            EV_Result.setText(str);
        }
        // 以後輸入的肯定不是第一個數字了
        firstDigit = false;
    }

    /**
     * 從文字框中獲取數字
     *
     * @return result
     */
    public double getNumFromEV_Result() {
        double result = 0;
        try {
            result = Double.valueOf(EV_Result.getText().toString());
        } catch (NumberFormatException e) {
            Log.i("TAG","您輸入的不是數字");
        }
        return result;
    }

    /**
     * 設定清空C鍵
     */
    public void setBtn_C() {
        EV_Result.setText("0");
        firstDigit = true;
        operator = "=";
    }

    /**
     * 設定返回Back鍵
     */
    public void setBtn_Back() {
        String currentResult = EV_Result.getText().toString();
        int i = currentResult.length();
        if (i > 0) {
            currentResult = currentResult.substring(0, i - 1);  // 將文字最後一個字元去掉
            if (currentResult.length() == 0) {  // 如果沒有了內容,初始化計算器的各種值
                EV_Result.setText("0");
            } else {
                EV_Result.setText(currentResult);  // 顯示新的文字
            }
        }
    }

    /**
     * 初始化控制元件
     */
    public void init() {
        EV_Result = findViewById(R.id.EV_result);

        // 第一行
        Button Btn_C;  // 清空結果框
        Button Btn_Back;  // 返回
        Button Btn_ModuloDivision;  // 模除
        Button Btn_Division; // 除法
        // 第二行
        Button Btn_Num7;
        Button Btn_Num8;
        Button Btn_Num9;
        Button Btn_Multiplication;  // 乘發
        // 第三行
        Button Btn_Num4;
        Button Btn_Num5;
        Button Btn_Num6;
        Button Btn_Subtraction;  // 減法
        // 第四行
        Button Btn_Num1;
        Button Btn_Num2;
        Button Btn_Num3;
        Button Btn_Addition;  // 加法
        // 第五行
        Button Btn_Num0;
        Button Btn_DecimalPoint;  // 小數點
        Button Btn_Equal;  // 等於
        Btn_C = findViewById(R.id.Btn_C);
        Btn_Back = findViewById(R.id.Btn_Back);
        Btn_ModuloDivision = findViewById(R.id.Btn_ModuloDivision);
        Btn_Division = findViewById(R.id.Btn_Division);

        Btn_Num7 = findViewById(R.id.Btn_Num7);
        Btn_Num8 = findViewById(R.id.Btn_Num8);
        Btn_Num9 = findViewById(R.id.Btn_Num9);
        Btn_Multiplication = findViewById(R.id.Btn_Multiplication);

        Btn_Num4 = findViewById(R.id.Btn_Num4);
        Btn_Num5 = findViewById(R.id.Btn_Num5);
        Btn_Num6 = findViewById(R.id.Btn_Num6);
        Btn_Subtraction = findViewById(R.id.Btn_Subtraction);

        Btn_Num1 = findViewById(R.id.Btn_Num1);
        Btn_Num2 = findViewById(R.id.Btn_Num2);
        Btn_Num3 = findViewById(R.id.Btn_Num3);
        Btn_Addition = findViewById(R.id.Btn_Addition);

        Btn_Num0 = findViewById(R.id.Btn_Num0);
        Btn_DecimalPoint = findViewById(R.id.Btn_DecimalPoint);
        Btn_Equal = findViewById(R.id.Btn_Equal);

        Btn_C.setOnClickListener(this);
        Btn_Back.setOnClickListener(this);
        Btn_ModuloDivision.setOnClickListener(this);
        Btn_Division.setOnClickListener(this);
        Btn_Num7.setOnClickListener(this);
        Btn_Num8.setOnClickListener(this);
        Btn_Num9.setOnClickListener(this);
        Btn_Multiplication.setOnClickListener(this);
        Btn_Num4.setOnClickListener(this);
        Btn_Num5.setOnClickListener(this);
        Btn_Num6.setOnClickListener(this);
        Btn_Subtraction.setOnClickListener(this);
        Btn_Num1.setOnClickListener(this);
        Btn_Num2.setOnClickListener(this);
        Btn_Num3.setOnClickListener(this);
        Btn_Addition.setOnClickListener(this);
        Btn_Num0.setOnClickListener(this);
        Btn_DecimalPoint.setOnClickListener(this);
        Btn_Equal.setOnClickListener(this);
    }

}

 .xml檔案

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".CalculatorActivity">
    <!-- 結果 -->
    <EditText
        android:id="@+id/EV_result"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:gravity="right"
        android:cursorVisible="false"
        android:textSize="25sp"
        android:paddingBottom="0dp"
        android:text="0" />
    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:columnCount="4">

        <Button
            android:id="@+id/Btn_C"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Clear"/>
        <Button
            android:id="@+id/Btn_Back"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Back"/>
        <Button
            android:id="@+id/Btn_ModuloDivision"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="%"/>
        <Button
            android:id="@+id/Btn_Division"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="/"/>
        <Button
            android:id="@+id/Btn_Num7"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="7"/>

        <Button
            android:id="@+id/Btn_Num8"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="8"/>
        <Button
            android:id="@+id/Btn_Num9"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="9"/>
        <Button
            android:id="@+id/Btn_Multiplication"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="*"/>
        <Button
            android:id="@+id/Btn_Num4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="4"/>
        <Button
            android:id="@+id/Btn_Num5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="5"/>
        <Button
            android:id="@+id/Btn_Num6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="6"/>
        <Button
            android:id="@+id/Btn_Subtraction"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="-"/>
        <Button
            android:id="@+id/Btn_Num1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="1"/>
        <Button
            android:id="@+id/Btn_Num2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="2"/>
        <Button
            android:id="@+id/Btn_Num3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="3"/>
        <Button
            android:id="@+id/Btn_Addition"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="+"/>
        <Button
            android:id="@+id/Btn_Num0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_columnSpan="2"
            android:layout_gravity="fill"
            android:text="0"/>
        <Button
            android:id="@+id/Btn_DecimalPoint"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="."/>
        <Button
            android:id="@+id/Btn_Equal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="="/>

    </GridLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_marginTop="20sp"
        android:weightSum="10">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="6"
            android:text="本程式由Kj純手工獨自打造。。。"
            android:layout_marginTop="40dp"
            android:gravity="center_horizontal"
            android:textSize="20sp"
            android:textStyle="bold"
             />
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:src="@drawable/cj"
            android:layout_weight="4"
            android:layout_marginTop="10px"
            android:scaleType="center"
            />
    </LinearLayout>
</LinearLayout>

四、打包APK檔案以及全部原始碼下載