Android 简单计算器实现

这篇博客介绍了Android初学者如何实现一个简单的计算器应用,包括加减乘除和清除功能。文章提到了在Android Studio中可能遇到的闪退问题,并建议通过新建项目或逐步注释代码来排查错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初学android,仅能实现一些较为简单的功能,下面代码能实现加减乘除和清除功能,但是不能实现多位数的计算。

界面布置activity_main.xml:

 

<?xml version="1.0" encoding="utf-8"?>
<GridLayout 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"
    tools:context=".MainActivity"
    android:rowCount="6"
    android:columnCount="4"
    >//网格布局,设置为6行4列
    <!--文本标签-->
    <EditText
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_columnSpan="4"
        android:layout_marginLeft="4px"
        android:gravity="right"
        android:textSize="50dip"
        />
    <!--按钮-->
    <Button
        android:id="@+id/delete"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_columnSpan="4"
        android:text="清除"
        android:textSize="26sp"/>
    <Button android:id="@+id/but11" android:text="1" android:textSize="26sp"/>
    <Button android:id="@+id/but12" android:text="2" android:textSize="26sp"/>
    <Button android:id="@+id/but13" android:text="3" android:textSize="26sp"/>
    <Button android:id="@+id/but14" android:text="+" android:textSize="26sp"/>
    <Button android:id="@+id/but21" android:text="4" android:textSize="26sp"/>
    <Button android:id="@+id/but22" android:text="5" android:textSize="26sp"/>
    <Button android:id="@+id/but23" android:text="6" android:textSize="26sp"/>
    <Button android:id="@+id/but24" android:text="-" android:textSize="26sp"/>
    <Button android:id="@+id/but31" android:text="7" android:textSize="26sp"/>
    <Button android:id="@+id/but32" android:text="8" android:textSize="26sp"/>
    <Button android:id="@+id/but33" android:text="9" android:textSize="26sp"/>
    <Button android:id="@+id/but34" android:text="*" android:textSize="26sp"/>
    <Button android:id="@+id/but41" android:text="." android:textSize="26sp"/>
    <Button android:id="@+id/but42" android:text="0" android:textSize="26sp"/>
    <Button android:id="@+id/but43" android:text="=" android:textSize="26sp"/>
    <Button android:id="@+id/but44" android:text="/" android:textSize="26sp"/>
</GridLayout>

 功能实现activity_main.java,主要实现按钮的监控功能和基本算法

package com.example.counter;

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

public class MainActivity extends AppCompatActivity {
    private EditText txt1;
    private Button del, bu11, bu12, bu13, bu14, bu21, bu22, bu23, bu24, bu31, bu32, bu33, bu34, bu41, bu42, bu43, bu44;
    boolean clr_flag;//判断文本框是否清空

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);//显示activity_main.xml定义的用户界面
        txt1 = (EditText) findViewById(R.id.text1);
        del = (Button) findViewById(R.id.delete);
        bu11 = (Button) findViewById(R.id.but11);
        bu12 = (Button) findViewById(R.id.but12);
        bu13 = (Button) findViewById(R.id.but13);
        bu14 = (Button) findViewById(R.id.but14);
        bu21 = (Button) findViewById(R.id.but21);
        bu22 = (Button) findViewById(R.id.but22);
        bu23 = (Button) findViewById(R.id.but23);
        bu24 = (Button) findViewById(R.id.but24);
        bu31 = (Button) findViewById(R.id.but31);
        bu32 = (Button) findViewById(R.id.but32);
        bu33 = (Button) findViewById(R.id.but33);
        bu34 = (Button) findViewById(R.id.but34);
        bu41 = (Button) findViewById(R.id.but41);
        bu42 = (Button) findViewById(R.id.but42);
        bu43 = (Button) findViewById(R.id.but43);
        bu44 = (Button) findViewById(R.id.but44);//与用户界面程序中的组件建立关联
        del.setOnClickListener(new click());
        bu11.setOnClickListener(new click());
        bu12.setOnClickListener(new click());
        bu13.setOnClickListener(new click());
        bu14.setOnClickListener(new click());
        bu21.setOnClickListener(new click());
        bu22.setOnClickListener(new click());
        bu23.setOnClickListener(new click());
        bu24.setOnClickListener(new click());
        bu31.setOnClickListener(new click());
        bu32.setOnClickListener(new click());
        bu33.setOnClickListener(new click());
        bu34.setOnClickListener(new click());
        bu41.setOnClickListener(new click());
        bu42.setOnClickListener(new click());
        bu43.setOnClickListener(new click());
        bu44.setOnClickListener(new click());//注册监听接口
    }
    class click implements View.OnClickListener{
        public void onClick(View v) {
            String str = txt1.getText().toString();
            switch (v.getId()) {
                case R.id.but11:
                case R.id.but12:
                case R.id.but13:
                case R.id.but21:
                case R.id.but22:
                case R.id.but23:
                case R.id.but31:
                case R.id.but32:
                case R.id.but33:
                case R.id.but42:
                    if (clr_flag) {
                        clr_flag = false;
                        str = "";
                        txt1.setText("");
                    }
                    txt1.setText(str + ((Button) v).getText());
                    break;
                case R.id.but14:
                case R.id.but24:
                case R.id.but34:
                case R.id.but44:
                    if (clr_flag) {
                        clr_flag = false;
                        str = "";
                        txt1.setText("");
                    }
                    if (str.contains("+") || str.contains("-") || str.contains("*") || str.contains("/")) {
                        str = str.substring(0, str.indexOf(" "));//如果文本框中包含算法符号,则将其删除
                    }
                    txt1.setText(str + " " + ((Button) v).getText() + " ");
                    break;
                case R.id.delete:
                    if (clr_flag) {
                        clr_flag = false;
                        str = "";
                        txt1.setText("");
                    } else if (str != null && !str.equals("")) {
                        txt1.setText(str.substring(0, str.length() - 1));//如果字符串不为空并且不包含空格,则删去文本框的最后一个字符
                    }
                    break;
                case R.id.but43:
                    getResult();
                    break;
            }

            }

            private void getResult()//等式算法
            {
            String exp=txt1.getText().toString();
            if(exp==null||exp.equals(""))//文本框没有数字
                return;
            if(!exp.contains("")){//文本框只有数字
                return;
            }
                if (clr_flag) {
                    clr_flag = false;
                    return;
                }
                clr_flag=true;
                String s1=exp.substring(0,exp.indexOf(" "));//得到第一个数字
                String op=exp.substring(exp.indexOf(" ")+1,exp.indexOf(" ")+2);//得到算法符号
                String s2=exp.substring(exp.indexOf(" ")+3);//得到第二个数字
                double cnt=0;
                if(!s1.equals("")&&!s2.equals("")) {//正常情况计算
                    double d1 = Double.parseDouble(s1);
                    double d2 = Double.parseDouble(s2);
                    if (op.equals("+")) {
                        cnt = d1 + d2;
                    }
                    if (op.equals("-")) {
                        cnt = d1 - d2;
                    }
                    if (op.equals("*")) {
                        cnt = d1 * d2;
                    }
                    if (op.equals("/")) {
                        if (d2 == 0) cnt = 0;
                        else cnt = d1 / d2;
                    }
                    if (!s1.contains(".") && !s2.contains(".") && !op.equals("/")) {
                        int res = (int) cnt;
                        txt1.setText(res + "");//没有小数点,输出整数
                    } else {
                        txt1.setText(cnt + "");//有小数点,输出double型
                    }
                }
                    else if(s1.equals("")&&!s2.equals(".")) {//第一个数值为空,第二个数值为整数
                    double d2 = Double.parseDouble(s2);
                    if (op.equals("+")) {
                        cnt = d2;
                    }
                    if (op.equals("-")) {
                        cnt = 0 - d2;
                    }
                    if (op.equals("*")) {
                        cnt = 0;
                    }
                    if (op.equals("/")) {
                        cnt = 0;
                    }
                    if (!s2.contains(".")) {
                        int res = (int) cnt;
                        txt1.setText(res + " ");
                    } else {
                        txt1.setText(cnt + " ");
                    }
                }
                else {
                    txt1.setText("");//仅有算法符号,输出为空

                }



        }
    }
}

android studio 编写容易产生闪退,可以新建项目,查看会不会闪退,如果app没问题,就是代码编写错误了,这个时候可以试着注释掉一些代码,找出有问题的代码修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值