本文实例为大家分享了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="wrap_content"

android:stretchColumns="4"

android:focusable="true"

android:focusableInTouchMode="true"

tools:context=".MainActivity">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="#aaaaaa">

android:layout_width="0dp"

android:layout_height="200dp"

android:layout_column="0"

android:gravity="right"

android:layout_weight="1">

android:id="@+id/content_box"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="bottom|right"

android:background="@null"

android:hint="0"

android:textSize="20pt" />

android:id="@+id/btn_c"

android:layout_width="0dp"

android:layout_height="70dp"

android:layout_column="0"

android:layout_weight="1"

android:text="C"

android:textColor="#ff0000"

android:textSize="12pt" />

android:id="@+id/btn_ce"

android:layout_width="0dp"

android:layout_height="70dp"

android:layout_column="1"

android:layout_weight="1"

android:text="CE"

android:textColor="#ff0000"

android:textSize="12pt" />

android:id="@+id/btn_aliquot"

android:layout_width="0dp"

android:layout_height="70dp"

android:layout_column="2"

android:layout_weight="1"

android:text="%"

android:textColor="#ff0000"

android:textSize="12pt" />

android:id="@+id/btn_divide"

android:layout_width="0dp"

android:layout_height="70dp"

android:layout_column="3"

android:layout_weight="1"

android:text="/"

android:textColor="#ff0000"

android:textSize="12pt" />

android:id="@+id/btn_leftBracket"

android:layout_width="0dp"

android:layout_height="70dp"

android:layout_column="0"

android:layout_span="1"

android:layout_weight="1"

android:text="("

android:textColor="#ff0000"

android:textSize="12pt" />

android:id="@+id/btn_rightBracket"

android:layout_width="0dp"

android:layout_height="70dp"

android:layout_column="0"

android:layout_span="1"

android:layout_weight="1"

android:text=")"

android:textColor="#ff0000"

android:textSize="12pt" />

android:id="@+id/btn_seven"

android:layout_width="0dp"

android:layout_height="70dp"

android:layout_column="0"

android:layout_weight="1"

android:text="7"

android:textSize="12pt" />

android:id="@+id/btn_eight"

android:layout_width="0dp"

android:layout_height="70dp"

android:layout_column="1"

android:layout_weight="1"

android:text="8"

android:textSize="12pt" />

android:id="@+id/btn_nine"

android:layout_width="0dp"

android:layout_height="70dp"

android:layout_column="2"

android:layout_weight="1"

android:text="9"

android:textSize="12pt" />

android:id="@+id/btn_multiply"

android:layout_width="0dp"

android:layout_height="70dp"

android:layout_column="3"

android:layout_weight="1"

android:text="*"

android:textColor="#ff0000"

android:textSize="12pt" />

android:id="@+id/btn_four"

android:layout_width="0dp"

android:layout_height="70dp"

android:layout_column="0"

android:layout_weight="1"

android:text="4"

android:textSize="12pt" />

android:id="@+id/btn_five"

android:layout_width="0dp"

android:layout_height="70dp"

android:layout_column="1"

android:layout_weight="1"

android:text="5"

android:textSize="12pt" />

android:id="@+id/btn_six"

android:layout_width="0dp"

android:layout_height="70dp"

android:layout_column="2"

android:layout_weight="1"

android:text="6"

android:textSize="12pt" />

android:id="@+id/btn_subtract"

android:layout_width="0dp"

android:layout_height="70dp"

android:layout_column="3"

android:layout_weight="1"

android:text="-"

android:textColor="#ff0000"

android:textSize="12pt" />

android:id="@+id/btn_one"

android:layout_width="0dp"

android:layout_height="70dp"

android:layout_column="0"

android:layout_weight="1"

android:text="1"

android:textSize="12pt" />

android:id="@+id/btn_two"

android:layout_width="0dp"

android:layout_height="70dp"

android:layout_column="1"

android:layout_weight="1"

android:text="2"

android:textSize="12pt" />

android:id="@+id/btn_three"

android:layout_width="0dp"

android:layout_height="70dp"

android:layout_column="2"

android:layout_weight="1"

android:text="3"

android:textSize="12pt" />

android:id="@+id/btn_add"

android:layout_width="0dp"

android:layout_height="70dp"

android:layout_column="3"

android:layout_weight="1"

android:text="+"

android:textColor="#ff0000"

android:textSize="12pt" />

android:id="@+id/btn_point"

android:layout_width="0dp"

android:layout_height="70dp"

android:layout_column="0"

android:layout_weight="1"

android:text="."

android:textSize="12pt" />

android:id="@+id/btn_zero"

android:layout_width="0dp"

android:layout_height="70dp"

android:layout_column="1"

android:layout_weight="1"

android:text="0"

android:textSize="12pt" />

android:id="@+id/btn_equal"

android:layout_width="0dp"

android:layout_height="70dp"

android:layout_column="2"

android:layout_weight="2"

android:text="="

android:textColor="#ff0000"

android:textSize="12pt" />

Activicy代码:

package com.example.newcalculator;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

import java.lang.reflect.Type;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

/*按钮定义*/

Button btn_one; //1

Button btn_two; //2

Button btn_three; //3

Button btn_four; //4

Button btn_five; //5

Button btn_six; //6

Button btn_seven; //7

Button btn_eight; //8

Button btn_nine; //9

Button btn_zero; //0

Button btn_c; //c

Button btn_ce; //ce

Button btn_aliquot; //%

Button btn_divide; //除号

Button btn_multiply;//x

Button btn_subtract;//-

Button btn_add; //+

Button btn_point; //.

Button btn_equal; //=

Button btn_leftBracket;//(

Button btn_rightBracket;//)

EditText contentBox;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initControls();

initClickEvent();

}

//找到控件

private void initControls() {

btn_one = findViewById(R.id.btn_one);

btn_two = findViewById(R.id.btn_two);

btn_three = findViewById(R.id.btn_three);

btn_four = findViewById(R.id.btn_four);

btn_five = findViewById(R.id.btn_five);

btn_six = findViewById(R.id.btn_six);

btn_seven = findViewById(R.id.btn_seven);

btn_eight = findViewById(R.id.btn_eight);

btn_nine = findViewById(R.id.btn_nine);

btn_zero = findViewById(R.id.btn_zero);

btn_c = findViewById(R.id.btn_c);

btn_ce = findViewById(R.id.btn_ce);

btn_aliquot = findViewById(R.id.btn_aliquot);

btn_divide = findViewById(R.id.btn_divide);

btn_multiply = findViewById(R.id.btn_multiply);

btn_subtract = findViewById(R.id.btn_subtract);

btn_add = findViewById(R.id.btn_add);

btn_point = findViewById(R.id.btn_point);

btn_equal = findViewById(R.id.btn_equal);

contentBox = findViewById(R.id.content_box);

btn_leftBracket = findViewById(R.id.btn_leftBracket);

btn_rightBracket = findViewById(R.id.btn_rightBracket);

}

@Override

public void onClick(View view) {

switch (view.getId()){

case R.id.btn_one:{

changeVal("1");

}break;

case R.id.btn_two:{

changeVal("2");

}break;

case R.id.btn_three:{

changeVal("3");

}break;

case R.id.btn_four:{

changeVal("4");

}break;

case R.id.btn_five:{

changeVal("5");

}break;

case R.id.btn_six:{

changeVal("6");

}break;

case R.id.btn_seven:{

changeVal("7");

}break;

case R.id.btn_eight:{

changeVal("8");

}break;

case R.id.btn_nine:{

changeVal("9");

}break;

case R.id.btn_zero:{

changeVal("0");

}break;

case R.id.btn_aliquot:{

changeVal("%");

}break;

case R.id.btn_divide:{

changeVal("/");

}break;

case R.id.btn_multiply:{

changeVal("*");

}break;

case R.id.btn_subtract:{

changeVal("-");

}break;

case R.id.btn_add:{

changeVal("+");

}break;

case R.id.btn_rightBracket:{

changeVal(")");

}break;

case R.id.btn_leftBracket:{

changeVal("(");

}break;

case R.id.btn_c:{

funC();

}break;

case R.id.btn_ce:{

funClearAll();

}break;

case R.id.btn_point:{

changeVal(".");

}break;

case R.id.btn_equal:{

String str = contentBox.getText().toString();

Calculator calculator = new Calculator();

Double result = calculator.Eval(str);

contentBox.setText(result.toString());

}break;

}

}

private void changeVal(String flag){

String str = contentBox.getText().toString();

contentBox.setText(str+flag);

}

private void funC(){

String str = contentBox.getText().toString();

str = str.substring(0,str.length()-1);

contentBox.setText(str);

}

private void funClearAll(){

contentBox.setText("");

}

private void initClickEvent(){

btn_one.setOnClickListener(this);

btn_two.setOnClickListener(this);

btn_three.setOnClickListener(this);

btn_four.setOnClickListener(this);

btn_five.setOnClickListener(this);

btn_six.setOnClickListener(this);

btn_seven.setOnClickListener(this);

btn_eight.setOnClickListener(this);

btn_nine.setOnClickListener(this);

btn_zero.setOnClickListener(this);

btn_aliquot.setOnClickListener(this);

btn_divide.setOnClickListener(this);

btn_multiply.setOnClickListener(this);

btn_subtract.setOnClickListener(this);

btn_point.setOnClickListener(this);

btn_equal.setOnClickListener(this);

btn_add.setOnClickListener(this);

btn_c.setOnClickListener(this);

btn_ce.setOnClickListener(this);

btn_rightBracket.setOnClickListener(this);

btn_leftBracket.setOnClickListener(this);

}

}

计算表达式代码:

package com.example.newcalculator;

import java.util.*;

//计算 2*(4+(88-86)/2)

//计算 2*(4+(88-86)/2)

class Caculater {

private String[] sArry;//存分割后的字符串

private Stack houx = new Stack();

private Stack fuhao = new Stack();

//结构初始化

Caculater(String str) {

int i = str.length() - 1;

String temp = "";

int j = 0;

Boolean bool = true;

//在符号左右各添加一个#字符划分

while (true) {

if (!bool) break;

if (i == j) {

bool = false;

}

if (str.charAt(j) == '+'

|| str.charAt(j) == '-'

|| str.charAt(j) == '*'

|| str.charAt(j) == '/'

|| str.charAt(j) == '('

|| str.charAt(j) == ')') {

temp += '#';

temp += str.charAt(j);

temp += '#'; //填完后是2#*##(#4#+##(#88#-#86#)##/#32#)#

} else {

temp += str.charAt(j);

}

j++;

}

sArry = temp.split("#+");//用正则表达式分割成字符串,#+表示一个或多个#字符//结果:[2,*,(,4,+,(,88,-,85,),/,2,)]

}

//后序排列

public void backsort() {

//循环sArry

for (int i = 0; i < sArry.length; i++) {

//如果不是字符,就直接push入houx栈

if (!sArry[i].equals("+")

&& !sArry[i].equals("-")

&& !sArry[i].equals("*")

&& !sArry[i].equals("/")

&& !sArry[i].equals("(")

&& !sArry[i].equals(")")) {

houx.push(sArry[i]);

continue;

//否则是字符,若符号栈为空,直接入栈

} else if (fuhao.isEmpty()) {

fuhao.push(sArry[i]);

continue;

//如果为(括号,直接入符号栈

} else if (sArry[i].equals("(")) {

fuhao.push(sArry[i]);

continue;

//如果为)括号

} else if (sArry[i].equals(")")) {

/**

* 不断出栈直到(括号出现

*

*/

while (!fuhao.peek().equals("(")) {

houx.push(fuhao.pop());

}

fuhao.pop();//清掉(括号

//如果不为空,且要入的符号比符号栈顶的符号优先级高,则直接push入符号栈

} else if (!fuhao.isEmpty() && check(sArry[i], fuhao.peek())) { //

fuhao.push(sArry[i]);

continue;

//否则,将符号栈内优先级高的符号出栈,push入houx栈,再将符号存进符号栈

} else {

houx.push(fuhao.pop());

fuhao.push(sArry[i]);

continue;

}

}

//遍历完后,直接将符号栈内的依次出栈,push入houx栈

while (!fuhao.isEmpty()) {

houx.push(fuhao.pop());

}//结果是:2 4 88 86 - 2 / + * 栈内顺序

}

//check对比优先级

private boolean check(String a, String b) {

//如果符号栈内是(括号,直接返true

if (b.equals("(")) {

return true;

}

//如果符号栈内的优先级比要入的高,返回false

if ((b.equals("*") || b.equals("/")) && (a.equals("+") || a.equals("-"))) { //b>a

return false;

}

//。。。。。。。。。。。。。的低,返回true

if ((b.equals("+") || b.equals("-")) && (a.equals("*") || a.equals("/"))) { //b

return true;

}

return false;

}

//出栈计算

public Double suan() {

backsort();//后序排列

//结果栈end

Stack end = new Stack();

//遍历houx栈

for (int i = 0; i < houx.size(); i++) {

//如果是加号,end pop出来两个数字,计算后结果入栈

if (houx.get(i).equals("+")) {

Double b = end.pop();

Double a = end.pop();

end.push(a + b);

continue;

//如果是减号,end pop出栈两个数字,计算后结果入栈

} else if (houx.get(i).equals("-")) {

Double b = end.pop();

Double a = end.pop();

end.push(a - b);

continue;

//如果是乘号,end pop出栈两个数字,计算后结果入栈

} else if (houx.get(i).equals("*")) {

Double b = end.pop();

Double a = end.pop();

end.push(a * b);

continue;

//如果是除号,end pop出栈两个数字,计算后结果入栈

} else if (houx.get(i).equals("/")) {

Double b = end.pop();

Double a = end.pop();

end.push(a / b);

continue;

} else if (houx.get(i).isEmpty()) {

continue;

} else {

//不是符号,也就是数字的情况,Integer.parseInt转int型, push入栈

end.push(Double.parseDouble(houx.get(i)));

}

}

//输出结果

return end.pop();

}

}

public class Calculator {

static String str="";

public Double Eval(String str){

//结构化

Caculater cl = new Caculater(str);

//计算

Double result = cl.suan();

return result;

}

}

关于计算器的精彩文章请查看《计算器专题》 ,更多精彩等你来发现!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

android 字符串转小数点,Android实现计算器(计算表达式/计算小数点以及括号)...相关推荐

  1. java 线性计算器_java版科学计算器,支持表达式计算

    <java版科学计算器,支持表达式计算>由会员分享,可在线阅读,更多相关<java版科学计算器,支持表达式计算(12页珍藏版)>请在人人文库网上搜索. 1.程序设计综合设计题目 ...

  2. android字符串显示textview,Android编程:TextView不显示完整字符串

    我有一个TextView,我试图使显示一个基于2d字符的网格.在我的Java代码中,我创建了一个2d数组,我将该数组填充到字符串中,并将每个条目附加到另一个,并在达到数组行的末尾时添加换行符(.n). ...

  3. android 字符串折线图,Android + MPAndroidChart 实现折线、柱形和饼状图

    本文讲讲怎么用 MPAndroidChart 框架实现折线图.柱形图.饼图,并且进行样式设置,达到和宣传图差不多的效果. 一开始看到 MPAndroidChart 的各种图表介绍图感觉很好看,但是直接 ...

  4. android字符串末尾添加,android在textview编辑的末尾追加''

    理由 :宽度"a"小于"a",因此,如果基于某种大小(比如15个字母)截断字符串并通过代码添加"-".你可能会看到意想不到的结果. 现在来看 ...

  5. 计算表达式结果(支持带括号的加减乘除以及乘幂和小数运算)

    以(1.22+((3.43+54.54)*8^3*9)-3*(2+4*2-1))/10+9^3这个表达式为例吧.首先先分析一下这个表达式,有括号,括号的优先级最高,其次有乘幂和乘除,应该是先算乘幂再算 ...

  6. android 字符串转bitmap,android – 如何将Base64字符串转换为BitMap图像显示在ImageView?...

    我有一个Base64字符串,表示一个BitMap图像. 我需要将该字符串转换为BitMap图像,以使用它在ImageView在我的Android应用程序 怎么做? 这是我用来将图像转换为base64字 ...

  7. android 字符串 时间格式化,Android 获取年月日时分秒 格式化指定时间字符串

    1.获取Android系统当前时间年月日 时分秒(24小时制) //获取当前时间 Time time=new Time(); time.setToNow(); Log.i("cp" ...

  8. android 字符串转浮点,Android String类型转换为float、double和int的工具类方法

    在做项目时遇到了需要把年份(String)转换为int类型,对年份进行比较,顺便提取为方法,保存下来方便以后使用. public class ConvertUtil { //把String转化为flo ...

  9. Android计算器(计算表达式,能计算小数点以及括号)方法简单易懂

    布局代码: <?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android ...

最新文章

  1. python 写入网络视频文件很慢_OpenCV视频写入详解_Python,视频保存0kb问题
  2. 转载--redis密码管理
  3. linuxsed替换字符串后保存_字符串方法——replace()
  4. mysql查询并设置高亮_慢查询分析调优工具~mysqldumpslow
  5. .NET 开源免费图表组件库,Winform,WPF 通用
  6. linux mint视频,Linux Mint 20.1 beta 发布,新增免费视频播放器
  7. oracle判断是否是手机号码,oracle判断手机号码是否合法
  8. SU(Seismic Unix)与CUDA的混合编程
  9. python散点图拟合曲线如何求拟合_python 拟合曲线并求参
  10. Python使用xpath爬取51job
  11. 教你从进程中判断病毒木马的存在
  12. FastNetMon 使用笔记
  13. 华为交换机eth口作用_华为5700交换机eth接口做什么用的?怎么使用它?
  14. 时序逻辑电路的设计(一) -- 模10的计数器电路(附Multisim)
  15. Python 强制限定小数点位数
  16. 告别传统IT 信天通信助推教育行业云化变革
  17. 谷歌浏览器访问抖音网页版白屏
  18. c语言响铃编程,C语言C加加编程新手快速入门基础学习
  19. 【100个 Unity实用技能】| 关于触发器互相检测的必要前提条件配置
  20. 比亚迪“亮刀”、宁德时代“狂奔”,动力电池市场的巨头混战几时休?

热门文章

  1. 黑客‘劫持’了一颗卫星,用它直播黑客大会和放电影,并且还完全合法?
  2. Picked up _JAVA_OPTIONS: -Xmx900M”
  3. Flink实战(九十三):数据倾斜(二)keyby 窗口数据倾斜的优化
  4. 1163: [Baltic2008]Mafia
  5. 网络图片加载缓慢问题解决方案
  6. 江西专升本考试作弊事件,为什么最近考试作弊事件频发?
  7. python中stringvar的用法_Python tkinter.StringVar方法代码示例
  8. IMM管理口收集日志
  9. JSON树节点的增删查改
  10. 来不及细说,毕业三天靠Python兼职赚了两千