Android简单计算器

设计Android简单计算器

此次通过设计一个简单的计算器来巩固课堂上所学到的知识,熟悉Android的编程设计。

界面设计

计算器功能实现简单的加减乘除,混合运算。

  1. 效果图
    Android简单计算器
  2. 代码
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:rowCount="6"
    android:columnCount="4"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/show_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnSpan="4"
        android:layout_marginLeft="4px"
        android:gravity="center_vertical|right"
        android:text="0"
        android:textSize="50dp"/>

    <Button
        android:id="@+id/buttonClear"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_columnSpan="4"
        android:text="清除"
        android:textSize="26sp"
        android:background="#FF0000"
        />

    <Button
        android:id="@+id/buttonPop"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_columnSpan="4"
        android:text="删除"
        android:textSize="26sp"
        />

    <Button android:id="@+id/button1" android:text="1" android:textSize="26sp"/>
    <Button android:id="@+id/button2" android:text="2" android:textSize="26sp"/>
    <Button android:id="@+id/button3" android:text="3" android:textSize="26sp"/>
    <Button android:id="@+id/btn_plus" android:text="+" android:textSize="26sp"/>
    <Button android:id="@+id/button4" android:text="4" android:textSize="26sp"/>
    <Button android:id="@+id/button5" android:text="5" android:textSize="26sp"/>
    <Button android:id="@+id/button6" android:text="6" android:textSize="26sp"/>
    <Button android:id="@+id/btn_minus" android:text="-" android:textSize="26sp"/>
    <Button android:id="@+id/button7" android:text="7" android:textSize="26sp"/>
    <Button android:id="@+id/button8" android:text="8" android:textSize="26sp"/>
    <Button android:id="@+id/button9" android:text="9" android:textSize="26sp"/>
    <Button android:id="@+id/btn_multiply" android:text="*" android:textSize="26sp"/>
    <Button android:id="@+id/btn_dot" android:text="." android:textSize="26sp"/>
    <Button android:id="@+id/button0" android:text="0" android:textSize="26sp"/>
    <Button android:id="@+id/btn_result" android:text="=" android:textSize="26sp"/>
    <Button android:id="@+id/btn_divide" android:text="/" android:textSize="26sp"/>


</GridLayout>

逻辑实现

实现加减乘除混合运算
主要逻辑代码如下:

//加减乘除逻辑计算
        //等于号:“=” 监听器
        result.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String ss = show_text.getText().toString();
                //判断是否输入错误,检测错误
                if(ss==null||ss.equals("")){
                    return;
                }
                String [] str = {"+","-","*","/","."};
                boolean continu = true;
                for(int i=0;i<5;i++){
                    for(int j=0;j<5;j++){
                        if(ss.indexOf(str[i]+str[j])!=-1){
                            Toast.makeText(MainActivity.this, "有非法输入,请检查!", Toast.LENGTH_LONG).show();
                            continu = false;
                            break;
                        }
                    }
                }
                if(continu){ //开始分割计算,进行优先计算
                    List<String> list = new ArrayList<String>();//用来保存分割后的字符
                    double sum = 0;//结果置零
                    if(ss.indexOf("+")!=-1||ss.indexOf("-")!=-1) {//以“+”分割字符串
                        String[] strs = ss.split("\\+");
                        for (int i = 0; i < strs.length; i++) {
                            if (ss.indexOf("-") != -1) {
                                String[] a = strs[i].split("\\-");//以“-”分割字符串
                                list.add(a[0]);
                                for (int j = 1; j < a.length; j++) {
                                    list.add("-" + a[j]);
                                }
                            }
                            else{
                                list.add(strs[i]);
                            }
                        }
                    }
                    else{
                        list.add(ss);
                    }
                    for(int i=0;i<list.size();i++){
                        double rs = 1;
                        //先从乘除算起
                        if (list.get(i).indexOf("*")!=-1||list.get(i).indexOf("/")!=-1){
                            String [] s1 = list.get(i).split("\\*");//以“*”分割字符串
                            for(int j=0;j<s1.length;j++){
                                if(s1[j].indexOf("/")!=-1){
                                    String [] d = s1[j].split("\\/");//以“/”分割字符串
                                    double de = Double.parseDouble(d[0]);
                                    for (int k=1;k<d.length;k++){
                                        de = de/Double.parseDouble(d[k]);
                                    }
                                    rs = rs * de;
                                }
                                else{
                                    rs = rs*Double.parseDouble(s1[j]);
                                }
                            }
                            sum = sum + rs;
                        }
                        else{//再算加减
                            sum = sum + Double.parseDouble(list.get(i));
                        }
                    }
                    show_text.setText(sum+"");//输出
                }
            }
        });

总结

此次计算器主要实现了简单的加减乘除,能够混合运算,没有其他更多的功能,更高级的功能,输入判断只是简单的判断整体输入有没有错误,没有实现边输入边判断,虽然没有深入的实现,但还是能够让我学到点东西。