Android计算器简单逻辑实现

引言:

  我的android计算器的实现方式是:按钮输入一次,就处理一次。

  但是如果你学过数据结构(栈),就可以使用表达式解析(前缀,后缀)处理。

  而这个方式已经很成熟了,但是时间有限,只完成了这个简单的计算器。

  至于,这个Android的布局已经在我博客中发布了,不再讲述。           

 package com.example.androidlessontwo;

 import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; public class MainActivity extends Activity { private Button[] buttonNum=new Button[11];
private Button[] buttonComand=new Button[5];
private TextView input=null;
private TextView rl=null;
private Button buttonClear=null;
private boolean firstFlag=true;
private double result=0.0;
private String lastCommand; public void MyCalculator()
{
result = 0.0;
firstFlag=true;
lastCommand="=";
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonNum[0]=(Button) findViewById(R.id.num0);
buttonNum[1]=(Button) findViewById(R.id.num1);
buttonNum[2]=(Button) findViewById(R.id.num2);
buttonNum[3]=(Button) findViewById(R.id.num3);
buttonNum[4]=(Button) findViewById(R.id.num4);
buttonNum[5]=(Button) findViewById(R.id.num5);
buttonNum[6]=(Button) findViewById(R.id.num6);
buttonNum[7]=(Button) findViewById(R.id.num7);
buttonNum[8]=(Button) findViewById(R.id.num8);
buttonNum[9]=(Button) findViewById(R.id.num9);
buttonNum[10]=(Button) findViewById(R.id.point); buttonComand[0]=(Button) findViewById(R.id.add);
buttonComand[1]=(Button) findViewById(R.id.sub);
buttonComand[2]=(Button) findViewById(R.id.ride);
buttonComand[3]=(Button) findViewById(R.id.divide);
buttonComand[4]=(Button) findViewById(R.id.equal); input=(TextView) findViewById(R.id.input);
rl =(TextView) findViewById(R.id.rl);
buttonClear=(Button) findViewById(R.id.clean); NumberAction na= new NumberAction();
CommandAction ca=new CommandAction();
for(Button bc:buttonComand)
{
bc.setOnClickListener(ca);
}
for(Button bc:buttonNum)
{
bc.setOnClickListener(na);
}
buttonClear.setOnClickListener(new Button.OnClickListener()
{ @Override
public void onClick(View v) {
MyCalculator();
rl.setText("0.0");
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private class NumberAction implements Button.OnClickListener
{ @Override
public void onClick(View view)
{
Button btn = (Button)view;
String inputTemp =btn.getText().toString();//
input.setText(input.getText().toString()+inputTemp);
double numtemp = 0;
switch(btn.getId())
{
case R.id.num0:
{
if(firstFlag)
{
result=result*10+0;
firstFlag=false;
}
else
numtemp=numtemp*10+0;
break;
}
case R.id.num1:
{
if(firstFlag)
{
result=result*10+1;
firstFlag=false;
}
else
numtemp=numtemp*10+1;
break;
}
case R.id.num2:
{
if(firstFlag)
{
result=result*10+2;
firstFlag=false;
}
else
numtemp=numtemp*10+2;
break;
}
case R.id.num3:
{
if(firstFlag)
{
result=result*10+3;
firstFlag=false;
}
else
numtemp=numtemp*10+3;
break;
}
case R.id.num4:
{
if(firstFlag)
{
result=result*10+4;
firstFlag=false;
}
else
numtemp=numtemp*10+4;
break;
}
case R.id.num5:
{
if(firstFlag)
{
result=result*10+5;
firstFlag=false;
}
else
numtemp=numtemp*10+5;
break;
}
case R.id.num6:
{
if(firstFlag)
{
result=result*10+6;
firstFlag=false;
}
else
{
numtemp=numtemp*10+6;
calculate(numtemp);
}
break;
}
case R.id.num7:
{
if(firstFlag)
{
result=result*10+7;
firstFlag=false;
}
else
{
numtemp=numtemp*10+7;
calculate(numtemp);
}
break;
}
case R.id.num8:
{
if(firstFlag)
{
result=result*10+8;
{
result=result*10+8;
firstFlag=false;
}
}
else
{
numtemp=numtemp*10+8;
calculate(numtemp);
}
break;
}
case R.id.num9:
{
if(firstFlag)
{
result=result*10+9;
firstFlag=false;
}
else
{
numtemp=numtemp*10+9;
calculate(numtemp);
}
break;
}
} } } private class CommandAction implements Button.OnClickListener
{
@Override
public void onClick(View v)
{
Button btn=(Button)v;
String inputCommand=(String)btn.getText();
switch(btn.getId())
{
case R.id.add:
{
lastCommand="+";
break;
}
case R.id.sub:
{
lastCommand="-";
break;
}
case R.id.ride:
{
lastCommand="*";
break;
}
case R.id.divide:
{
lastCommand="/";
break;
}
case R.id.equal:
{
lastCommand="=";
input.setText("");
rl.setText(String.valueOf(result));
return ;
} }
input.setText(input.getText()+inputCommand);
} }
private void calculate(double x)
{ if(lastCommand.equals("+"))
{
result += x;
} if(lastCommand.equals("-"))
{
result -= x;
} if(lastCommand.equals("*"))
{
result *= x;
} if(lastCommand.equals("/"))
{
result /= x;
}
} }
 

Android计算器简单逻辑实现的更多相关文章

  1. C#实现任意大数的计算和简单逻辑命题的证明——前言

    介绍 这是本人毕业设计的项目,一直想将其整理成文,可一不小心4年就过去了(这个时间又可以读个大学了).现在给自己定一个目标,一个月时间里将项目的所有关键点都整理出来.不然真怕一眨眼又一个4年过去了,而 ...

  2. Android实现简单音乐播放器(MediaPlayer)

    Android实现简单音乐播放器(MediaPlayer) 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个简单的音乐播放器,要求功能 ...

  3. Android发展简单介绍

    Android一词的本义指“机器人”,同一时候也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统.中间件.用户界面和应用软件组成,号称是首个为移动 ...

  4. Android实现简单音乐播放器(startService和bindService后台运行程序)

    Android实现简单音乐播放器(MediaPlayer) 开发工具:Andorid Studio 1.3运行环境:Android 4.4 KitKat 工程内容 实现一个简单的音乐播放器,要求功能有 ...

  5. Android 实现简单音乐播放器(二)

    在Android 实现简单音乐播放器(一)中,我介绍了MusicPlayer的页面设计. 现在,我简单总结一些功能实现过程中的要点和有趣的细节,结合MainActivity.java代码进行说明(写出 ...

  6. Android 实现简单音乐播放器(一)

    今天掐指一算,学习Android长达近两个月了,今天开始,对过去一段时间的学习收获以及遇到的疑难杂症做一些总结. 简单音乐播放器是我自己完成的第一个功能较为完整的APP,可以说是我的Android学习 ...

  7. Android课程---Android Studio简单设置

    Android Studio 简单设置 界面设置 默认的 Android Studio 为灰色界面,可以选择使用炫酷的黑色界面.Settings-->Appearance-->Theme, ...

  8. Android实现简单拨号器

    Android实现简单拨号器 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 代码实现 界面布局只有GridLayout和EditText两个控件,全部 ...

  9. 【转】Android Studio简单设置

    原文网址:http://ask.android-studio.org/?/article/14 Android Studio 简单设置 界面设置 默认的 Android Studio 为灰色界面,可以 ...

随机推荐

  1. c++友元函数友元类

    友元函数和友元类的需要: 类具有封装和信息隐藏的特性.只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的.非成员函数可以访问类中的公有成员,但是如果将数据成员都定义为公有的,这 ...

  2. golang http/transport 代码分析

    请结合源码阅读,本文只是总结一下,源码里有详细的注释.基于:go1.12.4 http.Client 表示一个http client端,用来处理HTTP相关的工作,例如cookies, redirec ...

  3. Linux下mysql启动失败

    原因:强制重启服务器之后,发现mysql启动 失败 解决方法:强制清空 报错路径下的tmp文件,清空之后在tmp下面新建一个文件夹,文件夹的名字在你清空tmp之后启动mysql系统会给你提示 欧克,完 ...

  4. Codeforces Round #375 (Div. 2)【A,B【模拟】,D【DFS】】

    PS_B:阿洗吧!B题卧槽数组开了250... PS_D:D题主要挂在了50*50口算得了250,数组开小,然后一开始还错了.= =哎,以后对于数据范围还是注意一点: 卧槽,这场可真二百五了... A ...

  5. hdu5861【线段树】

    题意: 有n个点,每个两两之间有一条路,给出每条路开放的花费,每条路只能打开关闭一次,然后m天里给出一个区间代表这条路必须在该天开放,求每天需要的花费. 思路: 这是一题纯粹用线段树搞的题. 我们可以 ...

  6. 51nod1076(tarjan)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1076 题意:中文题诶- 思路:先用tarjan找出所有桥,再用 ...

  7. atcoder057D(组合数模板)

    题目链接:http://abc057.contest.atcoder.jp/tasks/abc057_d 题意:给出n个数,可以选择x~y个数,使其平均值最大,求其最大平均数以及选择方案数. 思路:只 ...

  8. Mol Cell Proteomics. |彭建祥| 人胃肠道间质瘤亚群蛋白质组图谱

    大家好,本周分享的是发表在Molecular & Cellular Proteomics 上的一篇关于人胃肠道间质瘤亚群蛋白质组图谱的文章,题目是Proteomic maps of human ...

  9. 安装Net::OpenSSH 库

    perl 离线安装 Net::OpenSSH 库 Net::OpenSSH 库 下载地址https://metacpan.org/pod/Net::OpenSSH 直接获取安装包命令 wget htt ...

  10. Flutter中的可滚动列表组件-PageView

    PageVIew,可滚动的视图列表组件,而且每一个子组件的大小都和视图窗口大小一样. 属性: controller -> PageController 用于控制视图页面滚动到的位置 childr ...