初学Android开发,在官方开发者网站https://developer.android.com/guide学完构建简单的应用后就开始尝试实现简单的计算器app。计算器的实现是参照一加手机的计算器设计,这里实现了计算器的表达式输入并输出运算结果,支持小数的四则运算。
工具:IntelliJ IDEA
语言:Java
app效果界面上面有两个TextView分别显示输入的运算表达式和计算结果;下方20个Button按钮实现按键功能。app中 % 和 ( ) 还未实现。可以输入数字和+-*/运算符,当为输入数字时不能输入运算符;小数点'.'也算运算符;不允许连续输入运算符(123+*不允许);超过double范围的数自动转为科学计数法显示。输入要计算的表达式后按'='按钮会显示运算结果。
实现通过android Activity绘制计算器的界面并设计组件布局
布局的activity_main.xml内容如下
接下来是MainActivity.java文件实现计算器的功能。计算器实现参照了网上的实现方法实现按钮事件(见参考的csnd博客);并且我融合了leetcode中通过栈实现四则运算的算法,在算法的基础上进行小的修改使其能支持小数(double)。
package com.example.MyApp;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.view.View.OnClickListener;import android.widget.TextView;import java.util.LinkedList;import java.util.Stack;public class MainActivity extends AppCompatActivity{private Button btn_0;private Button btn_1;private Button btn_2;private Button btn_3;private Button btn_4;private Button btn_5;private Button btn_6;private Button btn_7;private Button btn_8;private Button btn_9;private Button btn_point;// .小数点private Button btn_ac;// acprivate Button btn_del;// delprivate Button btn_add;// +private Button btn_sub;// -private Button btn_multply;// *private Button btn_divide;// /private Button btn_equal;// =private TextView _calculate;//算数表达式private TextView _result;//结果@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn_0 = (Button)findViewById(R.id.number0);btn_1 = (Button)findViewById(R.id.number1);btn_2 = (Button)findViewById(R.id.number2);btn_3 = (Button)findViewById(R.id.number3);btn_4 = (Button)findViewById(R.id.number4);btn_5 = (Button)findViewById(R.id.number5);btn_6 = (Button)findViewById(R.id.number6);btn_7 = (Button)findViewById(R.id.number7);btn_8 = (Button)findViewById(R.id.number8);btn_9 = (Button)findViewById(R.id.number9);btn_point = (Button)findViewById(R.id.sign_point);btn_ac = (Button)findViewById(R.id.sign_ac);btn_del = (Button)findViewById(R.id.sign_del);btn_add = (Button)findViewById(R.id.sign_add);btn_sub = (Button)findViewById(R.id.sign_sub);btn_multply = (Button)findViewById(R.id.sign_multiply);btn_divide = (Button)findViewById(R.id.sign_divide);btn_equal = (Button)findViewById(R.id.sign_equal);_calculate = (TextView) findViewById(R.id.num_calculate);_result = (TextView) findViewById(R.id.num_result);btn_0.setOnClickListener(ClickInHere);btn_1.setOnClickListener(ClickInHere);btn_2.setOnClickListener(ClickInHere);btn_3.setOnClickListener(ClickInHere);btn_4.setOnClickListener(ClickInHere);btn_5.setOnClickListener(ClickInHere);btn_6.setOnClickListener(ClickInHere);btn_7.setOnClickListener(ClickInHere);btn_8.setOnClickListener(ClickInHere);btn_9.setOnClickListener(ClickInHere);btn_point.setOnClickListener(ClickInHere);btn_ac.setOnClickListener(ClickInHere);btn_del.setOnClickListener(ClickInHere);btn_add.setOnClickListener(ClickInHere);btn_sub.setOnClickListener(ClickInHere);btn_multply.setOnClickListener(ClickInHere);btn_divide.setOnClickListener(ClickInHere);btn_equal.setOnClickListener(ClickInHere);}private OnClickListener ClickInHere = new OnClickListener() {@Overridepublic void onClick(View v) {String input = _calculate.getText().toString();switch (v.getId()){case R.id.number0:case R.id.number1:case R.id.number2:case R.id.number3:case R.id.number4:case R.id.number5:case R.id.number6:case R.id.number7:case R.id.number8:case R.id.number9:_calculate.setText(input+((Button)v).getText());break;case R.id.sign_point:case R.id.sign_add:case R.id.sign_sub:case R.id.sign_multiply:case R.id.sign_divide:if(input!=null&&!input.equals("")) {//不允许连续输入多个运算符char c=input.charAt(input.length()-1);if((byte)c>41&&(byte)c 0) {tempBackcal.add(stkEles.pop());}return tempBackcal;}//判断是否为数字public static boolean isNumeric(String str) {for (int i = 0; i < str.length(); i++) {//是否为数字或者小数点if (!Character.isDigit(str.charAt(i))&&str.charAt(i)!='.') {return false;}}return true;}}参考Android实现简单的计算器功能
https://blog.csdn.net/tracydragonlxy/article/details/77983241
leetcode 227. 基本计算器 II
https://leetcode-cn.com/problems/basic-calculator-ii/solution/zhan-de-jing-dian-ying-yong-ji-suan-qi-by-nopdes1r/